diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..b94d5d3 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +node_modules +# folder that contains the compiled TypeScript code. ### + +# ESLint must be disabled while the https://github.com/adaltas/node-csv/issues/323 has not been solved +scripts/check-licenses.* \ No newline at end of file diff --git a/.eslintignore.json b/.eslintignore.json deleted file mode 100644 index 2785a51..0000000 --- a/.eslintignore.json +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -# folder that contains the compiled TypeScript code. ### diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..f7eaaa6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,73 @@ +--- +name: "🐛 Bug Report" +description: Report a bug +title: "[BUG] (short issue description)" +labels: [bug, needs-triage] +assignees: [] +body: + - type: textarea + id: description + attributes: + label: Describe the bug + description: What is the problem? A clear and concise description of the bug. + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: | + What did you expect to happen? + validations: + required: true + - type: textarea + id: current + attributes: + label: Current Behavior + description: | + What actually happened? + + Please include full errors, uncaught exceptions, stack traces, and relevant logs. + If service responses are relevant, please include wire logs. + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction Steps + description: | + Provide a self-contained, concise snippet of code that can be used to reproduce the issue. + For more complex issues provide a repo with the smallest sample that reproduces the bug. + + Avoid including business logic or unrelated code, it makes diagnosis more difficult. + The code sample should be an SSCCE. See http://sscce.org/ for details. In short, please provide a code sample that we can copy/paste, run and reproduce. + validations: + required: true + - type: textarea + id: solution + attributes: + label: Possible Solution + description: | + Suggest a fix/reason for the bug + validations: + required: false + - type: textarea + id: context + attributes: + label: Additional Information/Context + description: | + Anything else that might be relevant for troubleshooting this bug. Providing context helps us come up with a solution that is most useful in the real world. + validations: + required: false + - type: input + id: vp-version + attributes: + label: CICD Boot version used + validations: + required: true + - type: input + id: environment + attributes: + label: Environment details (OS name and version, etc.) + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..9cb7b51 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,6 @@ +--- +blank_issues_enabled: false +contact_links: + - name: 💬 General Question + url: https://github.com/aws-samples/aws-cdk-cicd-boot-sample/discussions/categories/q-a + about: Please ask and answer questions as a discussion thread \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 0000000..17e32bf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,22 @@ +--- +name: "📕 Documentation Issue" +description: Report an issue in the API Reference documentation or Developer Guide +title: "[DOCS] (short issue description)" +labels: [documentation, needs-triage] +assignees: [] +body: + - type: textarea + id: description + attributes: + label: Describe the issue + description: A clear and concise description of the issue. + validations: + required: true + - type: textarea + id: links + attributes: + label: Links + description: | + Include links to affected documentation page(s). + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 0000000..0f94d9f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,59 @@ +--- +name: 🚀 Feature Request +description: Suggest an idea for this project +title: "[FEATURE] (short issue description)" +labels: [feature-request, needs-triage] +assignees: [] +body: + - type: textarea + id: description + attributes: + label: Describe the feature + description: A clear and concise description of the feature you are proposing. + validations: + required: true + - type: textarea + id: use-case + attributes: + label: Use Case + description: | + Why do you need this feature? For example: "I'm always frustrated when..." + validations: + required: true + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: | + Suggest how to implement the addition or change. Please include prototype/workaround/sketch/reference implementation. + validations: + required: false + - type: textarea + id: other + attributes: + label: Other Information + description: | + Any alternative solutions or features you considered, a more detailed explanation, stack traces, related issues, links for context, etc. + validations: + required: false + - type: checkboxes + id: ack + attributes: + label: Acknowledgements + options: + - label: I may be able to implement this feature request + required: false + - label: This feature might incur a breaking change + required: false + - type: input + id: vp-version + attributes: + label: CICD Boot version used + validations: + required: true + - type: input + id: environment + attributes: + label: Environment details (OS name and version, etc.) + validations: + required: true \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8752d3e..0fef7a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,24 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Released] +## [1.1.4] - 2024-01-30 + +In this release we have included bugfixes, 3rd party dependency updates and also refactored the License checking. To cleanup the non-used docker image for the license checker, please run the following command `docker rmi aws/codebuild/standard:7.0` and then re-run `npm run audit:fix:license` and follow the steps in the README.md. + +### Added +- Allowed modifying the location of the synthesized stacks with the `primaryOutputDirectory` attribute. This allows the CICD Boot to be placed into a subdirectory in a repository. That results in a cleaner directory structure where the root directory can focus on the business problem, while the CICD Boot will be present only as a sidecar and enable the CI/CD process. +### Changed +- Removed outdated S3 Resource Policy enforcements (`DenyUnEncryptedObjectUploads`) from bin/aspects.ts. This is handled from Amazon S3, [here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html) the official documentation (all new objects are automatically encrypted by default). +- Removed `fix_log_groups` from src/codebuild/post-deploy-fixes.py as this is only Porsche EPO specific and doesn't apply to all the other EPOs. +- License checking has been reworked to improve developer experience. The license only needs to be regenerated when new dependencies are introduced to either NPM or any Python package. It is determined by the change on the file. If the files are untouched the license checker will assume the dependencies are not changed and pass successfully. +- License checking is no longer depending on Docker images, the licenses are generated based on the environment the script is executed. It is recommended to generate the NOTICE file on an environment that is close to the desired target environment in case you are looking for the precise results. **Note**: List of dependencies can be different based on OS and CPU architecture types. +- License checking supports `requirements.txt` files from now as well. It is recommended to be as specific as possible with your dependency versions. Overall the recommendation is to use `Pipenv` over the `requirements.txt`. +- Scripts have been modified to assume that the `PROJECT_ROOT` is the `CWD` directory instead of the parent folder of the `scripts` folder. This allows the VP to be placed into a subfolder in a repository. +- Updated the 3rd party NPM library versions to latest +### Fixed +- Issue with python dependency check script on multi lambda layers structure +- Issue with the license checker in using amd64 platform + ## [1.1.3] - 2023-12-14 In this release we have included bugfixes, updates to README as well as refreshed the local environment requirements and all the packages in the package.json and in the lambda layers to the latest available versions. We have also introduced a way how to override the minimum required version of NodeJS for some libraries we have a hard depdendency on and do not have yet the latest NodeJS in use. diff --git a/NOTICE b/NOTICE index 3b0ce23..1408f89 100644 --- a/NOTICE +++ b/NOTICE @@ -229,7 +229,7 @@ Apache-2.0 limitations under the License. -@aws-cdk/asset-awscli-v1 2.2.201 +@aws-cdk/asset-awscli-v1 2.2.202 Apache-2.0 Apache License @@ -1104,7 +1104,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@babel/core 7.23.6 +@babel/core 7.23.9 MIT MIT License @@ -1468,7 +1468,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@babel/helpers 7.23.6 +@babel/helpers 7.23.9 MIT MIT License @@ -1520,7 +1520,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@babel/parser 7.23.6 +@babel/parser 7.23.9 MIT Copyright (C) 2012-2014 by various contributors (see AUTHORS) @@ -1907,7 +1907,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@babel/runtime 7.23.6 +@babel/runtime 7.23.9 MIT MIT License @@ -1933,7 +1933,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@babel/template 7.22.15 +@babel/template 7.23.9 MIT MIT License @@ -1985,7 +1985,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@babel/types 7.23.6 +@babel/types 7.23.9 MIT MIT License @@ -2296,7 +2296,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/cli 18.4.3 +@commitlint/cli 18.6.0 MIT The MIT License (MIT) @@ -2321,7 +2321,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/config-conventional 18.4.3 +@commitlint/config-conventional 18.6.0 MIT The MIT License (MIT) @@ -2346,7 +2346,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/config-validator 18.4.3 +@commitlint/config-validator 18.6.0 MIT The MIT License (MIT) @@ -2371,7 +2371,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/ensure 18.4.3 +@commitlint/ensure 18.6.0 MIT The MIT License (MIT) @@ -2396,7 +2396,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/execute-rule 18.4.3 +@commitlint/execute-rule 18.4.4 MIT The MIT License (MIT) @@ -2421,7 +2421,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/format 18.4.3 +@commitlint/format 18.6.0 MIT The MIT License (MIT) @@ -2446,7 +2446,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/is-ignored 18.4.3 +@commitlint/is-ignored 18.6.0 MIT The MIT License (MIT) @@ -2471,7 +2471,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/lint 18.4.3 +@commitlint/lint 18.6.0 MIT The MIT License (MIT) @@ -2496,7 +2496,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/load 18.4.3 +@commitlint/load 18.6.0 MIT The MIT License (MIT) @@ -2521,7 +2521,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/message 18.4.3 +@commitlint/message 18.4.4 MIT The MIT License (MIT) @@ -2546,7 +2546,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/parse 18.4.3 +@commitlint/parse 18.6.0 MIT The MIT License (MIT) @@ -2571,7 +2571,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/read 18.4.3 +@commitlint/read 18.6.0 MIT The MIT License (MIT) @@ -2596,7 +2596,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/resolve-extends 18.4.3 +@commitlint/resolve-extends 18.6.0 MIT The MIT License (MIT) @@ -2621,7 +2621,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/rules 18.4.3 +@commitlint/rules 18.6.0 MIT The MIT License (MIT) @@ -2646,7 +2646,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/to-lines 18.4.3 +@commitlint/to-lines 18.4.4 MIT The MIT License (MIT) @@ -2671,7 +2671,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/top-level 18.4.3 +@commitlint/top-level 18.4.4 MIT The MIT License (MIT) @@ -2696,7 +2696,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@commitlint/types 18.4.3 +@commitlint/types 18.6.0 MIT The MIT License (MIT) @@ -2819,7 +2819,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@eslint/js 8.55.0 +@eslint/js 8.56.0 MIT Copyright OpenJS Foundation and other contributors, @@ -2842,7 +2842,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@humanwhocodes/config-array 0.11.13 +@humanwhocodes/config-array 0.11.14 Apache-2.0 Apache License Version 2.0, January 2004 @@ -3252,7 +3252,7 @@ Apache-2.0 limitations under the License. -@humanwhocodes/object-schema 2.0.1 +@humanwhocodes/object-schema 2.0.2 BSD-3-Clause BSD 3-Clause License @@ -3285,6 +3285,24 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@isaacs/cliui 8.0.2 +ISC +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + @istanbuljs/load-nyc-config 1.1.0 ISC ISC License @@ -3773,7 +3791,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@jridgewell/trace-mapping 0.3.20 +@jridgewell/trace-mapping 0.3.22 MIT Copyright 2022 Justin Ridgewell @@ -3894,6 +3912,211 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +@pkgjs/parseargs 0.11.0 +MIT + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + @sinclair/typebox 0.27.8 MIT TypeBox: JSON Schema Type Builder with Static Type Resolution for TypeScript @@ -3920,7 +4143,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@sinonjs/commons 3.0.0 +@sinonjs/commons 3.0.1 BSD-3-Clause BSD 3-Clause License @@ -4092,7 +4315,7 @@ MIT SOFTWARE -@types/babel__generator 7.6.7 +@types/babel__generator 7.6.8 MIT MIT License @@ -4142,7 +4365,7 @@ MIT SOFTWARE -@types/babel__traverse 7.20.4 +@types/babel__traverse 7.20.5 MIT MIT License @@ -4364,32 +4587,7 @@ MIT SOFTWARE -@types/node 18.19.3 -MIT - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -@types/node 20.10.4 +@types/node 20.11.10 MIT MIT License @@ -4539,7 +4737,7 @@ MIT SOFTWARE -@types/uuid 9.0.7 +@types/uuid 9.0.8 MIT MIT License @@ -4614,7 +4812,7 @@ MIT SOFTWARE -@typescript-eslint/eslint-plugin 6.14.0 +@typescript-eslint/eslint-plugin 6.20.0 MIT MIT License @@ -4639,7 +4837,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@typescript-eslint/parser 6.14.0 +@typescript-eslint/parser 6.20.0 BSD-2-Clause TypeScript ESLint Parser Copyright JS Foundation and other contributors, https://js.foundation @@ -4665,7 +4863,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@typescript-eslint/scope-manager 6.14.0 +@typescript-eslint/scope-manager 6.20.0 MIT MIT License @@ -4690,7 +4888,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@typescript-eslint/type-utils 6.14.0 +@typescript-eslint/type-utils 6.20.0 MIT MIT License @@ -4715,7 +4913,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@typescript-eslint/types 6.14.0 +@typescript-eslint/types 6.20.0 MIT MIT License @@ -4740,7 +4938,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@typescript-eslint/typescript-estree 6.14.0 +@typescript-eslint/typescript-estree 6.20.0 BSD-2-Clause TypeScript ESTree @@ -4770,7 +4968,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@typescript-eslint/utils 6.14.0 +@typescript-eslint/utils 6.20.0 MIT MIT License @@ -4795,7 +4993,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@typescript-eslint/visitor-keys 6.14.0 +@typescript-eslint/visitor-keys 6.20.0 MIT MIT License @@ -4881,7 +5079,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -acorn-walk 8.3.1 +acorn-walk 8.3.2 MIT MIT License @@ -4906,7 +5104,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -acorn 8.11.2 +acorn 8.11.3 MIT MIT License @@ -5009,6 +5207,19 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +ansi-regex 6.0.1 +MIT +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + ansi-styles 3.2.1 MIT MIT License @@ -5048,6 +5259,19 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +ansi-styles 6.2.1 +MIT +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + anymatch 3.1.3 ISC The ISC License @@ -5665,7 +5889,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -aws-cdk-lib 2.114.1 +aws-cdk-lib 2.124.0 Apache-2.0 Apache License Version 2.0, January 2004 @@ -5855,7 +6079,7 @@ Apache-2.0 same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -6069,7 +6293,32 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -brace-expansion 1.1.11 +brace-expansion 1.1.11 +MIT +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +brace-expansion 2.0.1 MIT MIT License @@ -6404,7 +6653,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -caniuse-lite 1.0.30001570 +caniuse-lite 1.0.30001580 CC-BY-4.0 Attribution 4.0 International @@ -6829,7 +7078,7 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -cdk-monitoring-constructs 7.1.1 +cdk-monitoring-constructs 7.6.0 Apache-2.0 Apache License @@ -7035,7 +7284,7 @@ Apache-2.0 limitations under the License. -cdk-nag 2.27.214 +cdk-nag 2.28.25 Apache-2.0 Apache License @@ -7340,7 +7589,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -cicd-boot 1.1.3 +cicd-boot 1.1.4 MIT* MIT No Attribution @@ -8128,6 +8377,106 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +csv-generate 4.3.1 +MIT +The MIT License (MIT) + +Copyright (c) 2010 Adaltas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +csv-parse 5.5.3 +MIT +The MIT License (MIT) + +Copyright (c) 2010 Adaltas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +csv-stringify 6.4.5 +MIT +The MIT License (MIT) + +Copyright (c) 2010 Adaltas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +csv 6.3.6 +MIT +The MIT License (MIT) + +Copyright (c) 2010 Adaltas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + cz-conventional-changelog 3.3.0 MIT MIT License @@ -8961,7 +9310,43 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -electron-to-chromium 1.4.612 +eastasianwidth 0.2.0 +MIT +# East Asian Width + +Get [East Asian Width](http://www.unicode.org/reports/tr11/) from a character. + +'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(Narrow), 'A'(Ambiguous) or 'N'(Natural). + +Original Code is [東アジアの文字幅 (East Asian Width) の判定 - 中途](http://d.hatena.ne.jp/takenspc/20111126#1322252878). + +## Install + + $ npm install eastasianwidth + +## Usage + + var eaw = require('eastasianwidth'); + console.log(eaw.eastAsianWidth('₩')) // 'F' + console.log(eaw.eastAsianWidth('。')) // 'H' + console.log(eaw.eastAsianWidth('뀀')) // 'W' + console.log(eaw.eastAsianWidth('a')) // 'Na' + console.log(eaw.eastAsianWidth('①')) // 'A' + console.log(eaw.eastAsianWidth('ف')) // 'N' + + console.log(eaw.characterLength('₩')) // 2 + console.log(eaw.characterLength('。')) // 1 + console.log(eaw.characterLength('뀀')) // 2 + console.log(eaw.characterLength('a')) // 1 + console.log(eaw.characterLength('①')) // 2 + console.log(eaw.characterLength('ف')) // 1 + + console.log(eaw.length('あいうえお')) // 10 + console.log(eaw.length('abcdefg')) // 7 + console.log(eaw.length('¢₩。ᅵㄅ뀀¢⟭a⊙①بف')) // 19 + + +electron-to-chromium 1.4.647 ISC Copyright 2018 Kilian Valkhof @@ -9007,6 +9392,30 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +emoji-regex 9.2.2 +MIT +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + error-ex 1.3.2 MIT The MIT License (MIT) @@ -9249,7 +9658,7 @@ SOFTWARE. -eslint-plugin-import 2.29.0 +eslint-plugin-import 2.29.1 MIT The MIT License (MIT) @@ -9506,7 +9915,7 @@ Apache-2.0 limitations under the License. -eslint 8.55.0 +eslint 8.56.0 MIT Copyright OpenJS Foundation and other contributors, @@ -10050,7 +10459,7 @@ OTHER DEALINGS IN THE SOFTWARE. -fastq 1.15.0 +fastq 1.16.0 ISC Copyright (c) 2015-2020, Matteo Collina @@ -10348,23 +10757,23 @@ SOFTWARE. -fs-extra 11.1.1 -MIT -(The MIT License) - -Copyright (c) 2011-2017 JP Richardson +foreground-child 3.1.1 +ISC +The ISC License -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files -(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: +Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS -OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. fs-extra 11.2.0 @@ -10452,6 +10861,32 @@ the licensed code: DEALINGS IN THE SOFTWARE. +fsevents 2.3.3 +MIT +MIT License +----------- + +Copyright (C) 2010-2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + function-bind 1.1.2 MIT Copyright (c) 2013 Raynos. @@ -10698,6 +11133,25 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +glob 10.3.10 +ISC +The ISC License + +Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + glob 7.2.3 ISC The ISC License @@ -12585,6 +13039,65 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +jackspeak 2.3.6 +BlueOak-1.0.0 +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.*** + + jest-changed-files 29.7.0 MIT MIT License @@ -14950,6 +15463,25 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +lru-cache 10.2.0 +ISC +The ISC License + +Copyright (c) 2010-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + lru-cache 5.1.1 ISC The ISC License @@ -15261,6 +15793,25 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +minimatch 9.0.3 +ISC +The ISC License + +Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + minimist-options 4.1.0 MIT The MIT License (MIT) @@ -15330,6 +15881,25 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +minipass 7.0.4 +ISC +The ISC License + +Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ms 2.1.2 MIT The MIT License (MIT) @@ -16079,6 +16649,65 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +path-scurry 1.10.1 +BlueOak-1.0.0 +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.*** + + path-type 4.0.0 MIT MIT License @@ -16200,7 +16829,7 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -prettier 3.1.1 +prettier 3.2.4 MIT # Prettier license @@ -16332,7 +16961,7 @@ Author: The Babel Team (https://babel.dev/team) ---------------------------------------- -### @babel/parser@v7.23.5 +### @babel/parser@v7.23.6 > A JavaScript parser @@ -16391,7 +17020,7 @@ License: MIT ---------------------------------------- -### @glimmer/syntax@v0.85.13 +### @glimmer/syntax@v0.87.1 > Copyright (c) 2015 Tilde, Inc. > @@ -16415,7 +17044,7 @@ License: MIT ---------------------------------------- -### @glimmer/util@v0.85.13 +### @glimmer/util@v0.87.1 > Common utilities used in Glimmer @@ -16443,7 +17072,7 @@ License: MIT ---------------------------------------- -### @glimmer/wire-format@v0.85.13 +### @glimmer/wire-format@v0.87.1 License: MIT @@ -16658,7 +17287,7 @@ Author: Alex Bell ---------------------------------------- -### @typescript-eslint/types@v6.13.2 +### @typescript-eslint/types@v6.19.0 > Types for the TypeScript-ESTree AST spec @@ -16689,7 +17318,7 @@ Repository: ---------------------------------------- -### @typescript-eslint/typescript-estree@v6.13.2 +### @typescript-eslint/typescript-estree@v6.19.0 > A parser that converts TypeScript source code into an ESTree compatible form @@ -16725,7 +17354,7 @@ Repository: ---------------------------------------- -### acorn@v8.11.2 +### acorn@v8.11.3 > ECMAScript parser @@ -16819,7 +17448,7 @@ Author: Ika (https://github.com/ikatyang) ---------------------------------------- -### angular-html-parser@v5.0.2 +### angular-html-parser@v5.2.0 > A HTML parser extracted from Angular with some modifications @@ -16827,26 +17456,26 @@ License: MIT Homepage: Author: Ika (https://github.com/ikatyang) -> MIT License -> -> Copyright (c) Ika (https://github.com/ikatyang) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> MIT License +> +> Copyright (c) Ika (https://github.com/ikatyang) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > SOFTWARE. ---------------------------------------- @@ -17232,52 +17861,6 @@ Author: Thomas Watson Steen (https://twitter.com/wa7son) ---------------------------------------- -### clone@v1.0.4 - -> deep cloning of objects and arrays - -License: MIT -Repository: -Author: Paul Vorbach (http://paul.vorba.ch/) -Contributors: - - Blake Miner (http://www.blakeminer.com/) - - Tian You (http://blog.axqd.net/) - - George Stagas (http://stagas.com/) - - Tobiasz Cudnik (https://github.com/TobiaszCudnik) - - Pavel Lang (https://github.com/langpavel) - - Dan MacTough (http://yabfog.com/) - - w1nk (https://github.com/w1nk) - - Hugh Kennedy (http://twitter.com/hughskennedy) - - Dustin Diaz (http://dustindiaz.com) - - Ilya Shaisultanov (https://github.com/diversario) - - Nathan MacInnes (http://macinn.es/) - - Benjamin E. Coe (https://twitter.com/benjamincoe) - - Nathan Zadoks (https://github.com/nathan7) - - Róbert Oroszi (https://github.com/oroce) - - Aurélio A. Heckert (http://softwarelivre.org/aurium) - - Guy Ellis (http://www.guyellisrocks.com/) - -> Copyright © 2011-2015 Paul Vorbach -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of -> this software and associated documentation files (the “Software”), to deal in -> the Software without restriction, including without limitation the rights to -> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -> the Software, and to permit persons to whom the Software is furnished to do so, -> subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE -> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### collapse-white-space@v1.0.6 > Replace multiple white-space characters with a single space @@ -17453,39 +18036,6 @@ Contributors: ---------------------------------------- -### defaults@v1.0.4 - -> merge single level defaults over a config object - -License: MIT -Repository: -Author: Elijah Insua - -> The MIT License (MIT) -> -> Copyright (c) 2022 Sindre Sorhus -> Copyright (c) 2015 Elijah Insua -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. - ----------------------------------------- - ### diff@v5.1.0 > A javascript text diff implementation. @@ -18004,7 +18554,7 @@ Contributors: ---------------------------------------- -### flow-parser@v0.223.3 +### flow-parser@v0.226.0 > JavaScript parser written in OCaml. Produces ESTree AST @@ -19106,25 +19656,6 @@ Author: Isaac Z. Schlueter ---------------------------------------- -### map-age-cleaner@v0.1.3 - -> Automatically cleanup expired items in a Map - -License: MIT -Author: Sam Verschueren (github.com/SamVerschueren) - -> MIT License -> -> Copyright (c) Sam Verschueren (github.com/SamVerschueren) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### markdown-escapes@v1.0.4 > List of escapable characters in markdown @@ -19159,25 +19690,6 @@ Contributors: ---------------------------------------- -### mem@v9.0.2 - -> Memoize functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### merge2@v1.4.1 > Merge multiple streams into one stream in sequence or parallel. @@ -19279,25 +19791,6 @@ Contributors: ---------------------------------------- -### mimic-fn@v4.0.0 - -> Make a function mimic another one - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### minimatch@v3.1.2 > a glob matcher in javascript @@ -19441,37 +19934,6 @@ Author: Isaac Z. Schlueter (http://blog.izs.me/) ---------------------------------------- -### p-defer@v1.0.0 - -> Create a deferred promise - -License: MIT -Author: Sindre Sorhus (sindresorhus.com) - -> The MIT License (MIT) -> -> Copyright (c) Sindre Sorhus (sindresorhus.com) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. - ----------------------------------------- - ### p-limit@v4.0.0 > Run multiple promise-returning & async functions with limited concurrency @@ -19722,7 +20184,7 @@ Author: typicode ---------------------------------------- -### postcss@v8.4.32 +### postcss@v8.4.33 > Tool for transforming styles with JS plugins @@ -20508,7 +20970,7 @@ Author: Josh Goldberg ---------------------------------------- -### typescript@v5.3.2 +### typescript@v5.3.3 > TypeScript is a language for application scale JavaScript development @@ -21024,23 +21486,23 @@ Author: Ika (https://github.com/ikatyang) ---------------------------------------- -### wcwidth@v1.0.1 +### wcwidth.js@v1.1.2 -> Port of C's wcwidth() and wcswidth() +> a javascript porting of C's wcwidth() License: MIT -Homepage: -Repository: -Author: Tim Oxley +Homepage: +Repository: +Author: Woong Jun (http://code.woong.org/) Contributors: - - Woong Jun (http://code.woong.org/) + - Tim Oxley (http://campjs.com/) -> wcwidth.js: JavaScript Portng of Markus Kuhn's wcwidth() Implementation -> ======================================================================= +> wcwidth.js: a javascript portng of C's wcwidth() +> ================================================ > -> Copyright (C) 2012 by Jun Woong. +> Copyright (C) 2012-2014 by Woong Jun and Tim Oxley. > -> This package is a JavaScript porting of `wcwidth()` implementation +> This package is a javascript porting of `wcwidth()` implementation > [by Markus Kuhn](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c). > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -21058,12 +21520,12 @@ Contributors: > INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND > FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR > OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -> EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -> PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -> BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -> IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -> POSSIBILITY OF SUCH DAMAGE. +> EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +> OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +> IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +> OF SUCH DAMAGE. ---------------------------------------- @@ -21479,7 +21941,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -regenerator-runtime 0.14.0 +regenerator-runtime 0.14.1 MIT MIT License @@ -22046,7 +22508,7 @@ Apache-2.0 -safe-array-concat 1.0.1 +safe-array-concat 1.1.0 MIT MIT License @@ -22096,7 +22558,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -safe-regex-test 1.0.0 +safe-regex-test 1.0.2 MIT MIT License @@ -22184,7 +22646,7 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -set-function-length 1.1.1 +set-function-length 1.2.0 MIT MIT License @@ -22332,6 +22794,26 @@ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +signal-exit 4.1.0 +ISC +The ISC License + +Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + sisteransi 1.0.5 MIT MIT License @@ -22695,7 +23177,7 @@ Apache-2.0 limitations under the License. -spdx-exceptions 2.3.0 +spdx-exceptions 2.4.0 CC-BY-3.0 The package exports an array of strings. Each string is an identifier for a license exception under the [Software Package Data Exchange @@ -22904,6 +23386,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +stream-transform 3.3.0 +MIT +The MIT License (MIT) + +Copyright (c) 2010 Adaltas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + string-length 4.0.2 MIT MIT License @@ -22930,6 +23437,19 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +string-width 5.1.2 +MIT +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + string.prototype.trim 1.2.8 MIT The MIT License (MIT) @@ -23070,6 +23590,19 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +strip-ansi 7.1.0 +MIT +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + strip-bom 3.0.0 MIT The MIT License (MIT) @@ -23482,7 +24015,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -ts-jest 29.1.1 +ts-jest 29.1.2 MIT MIT License @@ -23532,7 +24065,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -tsconfig-paths 3.14.2 +tsconfig-paths 3.15.0 MIT The MIT License (MIT) @@ -24411,6 +24944,19 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +wrap-ansi 8.1.0 +MIT +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + wrappy 1.0.2 ISC The ISC License diff --git a/OSS_License_Summary.csv b/OSS_License_Summary.csv index ff8d052..a737eeb 100644 --- a/OSS_License_Summary.csv +++ b/OSS_License_Summary.csv @@ -1,5 +1,5 @@ ######################### -# Node Module: "." +# NPM module: package.json ######################### "License","Count" "(MIT OR Apache-2.0)","1" @@ -9,15 +9,16 @@ "Apache-2.0","23" "BSD-2-Clause","11" "BSD-3-Clause","18" +"BlueOak-1.0.0","2" "CC-BY-3.0","1" "CC-BY-4.0","1" "CC0-1.0","1" -"ISC","49" -"MIT","520" +"ISC","56" "MIT*","2" +"MIT","533" "Python-2.0","1" ######################### -# Python Module: "./src/lambda-layer/common" +# Python module: src/lambda-layer/common/Pipfile ######################### "License","Count" "Apache Software License","3" diff --git a/README.md b/README.md index 6009f14..8eb6856 100644 --- a/README.md +++ b/README.md @@ -227,9 +227,9 @@ NOTICE file **must** be kept up to date in the repository. NOTICE file consistency is tested by the `npm run audit:license`, this script is included into the CodePipeline Build step to ensure the NOTICE file is always up-to-date. -The script checks dependencies in `package.json` for NPM and `requirements.txt` for Python projects. In case, you are using other package managers, you need to manage those dependencies by **yourself** as long as that is not supported by CICD Boot. +The script checks dependencies in `package.json` for NPM, `Pipfile` and `requirements.txt` for Python projects. In case, you are using other package managers, you need to manage those dependencies by **yourself** as long as that is not supported by CICD Boot. -The used dependencies can be dependent on the Operating System and the runtime environment so for this reason the NOTICE file must contain everything that we distribute to the customer, i.e. everything that is installed by us in the customer's AWS account. We build a Docker image based on the CodeBuild Image to ensure the environment where the license checker runs is similar to the pipeline one. Running ```npm run audit:fix:license``` locally will give the same result as using it in the pipeline, to ensure that, based on your OS the dependency collection is executed inside a Docker container that provides similar environment to the CodeBuild. +The used dependencies can be dependent on the Operating System and the runtime environment so for this reason the NOTICE file can be different in case it is generated on a different location. To update the NOTICE file locally you need to run the following command: @@ -237,9 +237,8 @@ To update the NOTICE file locally you need to run the following command: npm run audit:fix:license ``` -The script is building an `aws/codebuild/standard:7.0` docker image and running the command inside of it to generate the NOTICE file. - -#### Note: The [aws/codebuild/standard:7.0](./utils/license-checker/Dockerfile) has been modified to only contain the Node, Python requirements, and to support ARM64 processors. +**Note** +This will only result with new Notice file generation in case any of the `package.json` for NPM, `Pipfile` and `requirements.txt` for Python projects has been modified. While the files are untouched the license is considered up to date. ### Configuration options We have listed a set of example licenses which are in general prohibited if you plan to deploy anything to production systems and keep the code private. You can change these licenses anytime by updating the ```licensecheck.json``` file. @@ -254,6 +253,7 @@ Example configuration: "excludedSubProjects": ["./example/package.json"] }, "python": { + "allowedTypes": ["Pipenv"], "excluded": [], "excludedSubProjects": ["./example/Pipfile"] } @@ -264,7 +264,8 @@ Example configuration: * Sub folder which `Pipfile` or `package.json` file should not be included into the License check should be listen under the `npm.excludedSubProjects` or `python.excludedSubProjects` attributes. * For NPM packages the subfolder also needs to contain a package-lock.json file to ensure the right dependencies will be installed and checked. * Dependencies can be excluded from the license verification for NPM and Python as well. - +* Python has many package management solution. The Vanilla Pipeline supports `Pipenv` and the regular `requirements.txt` + files. With the ```licensecheck.json``` file `python.allowedTypes` allows to configure which packageManager package types considered. The values are `Pipenv`, and the `requirements.txt`. ## Appendix @@ -329,7 +330,7 @@ git push -u origin ### Push changes to remote ### Working with Python dependencies The project utilizes the [Pipenv](https://pipenv.pypa.io/en/latest/). Pipenv automatically creates and manages a virtualenv for your project, as well as adds/removes packages from your `Pipfile` as you install/uninstall packages. It also generates a project `Pipfile.lock`, which is used to produce deterministic builds. -The Python dependencies are maintained in `Pipfile` instead of the `requirements.txt` file and requirements.txt files should not be commited to git. +The Python dependencies should be maintained in `Pipfile` instead of the `requirements.txt` file and requirements.txt files usage should be avoided. #### How to install Pipenv The recommended approach is to use `pip install pipenv -U` command. More information can be found [here](https://pipenv.pypa.io/en/latest/installation/#installing-pipenv). @@ -440,7 +441,7 @@ be consistent across those files. - If you have already deployed RES/DEV/INT and want to disable INT then please do the following: ```bash export ACCOUNT_INT="-" - cdk deploy --all --region ${AWS_REGION} --profile $RES_ACCOUNT_AWS_PROFILE --qualifier ${CDK_QUALIFIER} + npm run cdk deploy -- --all --region ${AWS_REGION} --profile $RES_ACCOUNT_AWS_PROFILE --qualifier ${CDK_QUALIFIER} ``` After performing this please do not forget to delete your CloudFormation resources on the previous INT Account. - `validation error detected: Value 'log-retention-..........-.......-...-DEV' at 'roleName' failed to satisfy constraint: Member must have length less than or equal to 64`: This usually happens if you use longer `applicationName` in the `config/AppConfig.ts` than 20 characters. In this case, you either use different application name or modify the log retention role in the [LogRetentionRoleStack](lib/stacks/core/LogRetentionRoleStack.ts). @@ -466,7 +467,7 @@ be consistent across those files. * `npm run license:macos` validate the NOTICE file on MacOS systems * `npm run lint` check for linting issues in the project * `npm run lint:fix` fix linting issues in the project (do not forget to add & commit the fixed files) -* `npm run cdk deploy` deploy this stack to your default AWS account/region +* `npm run cdk deploy -- --all` deploy all stacks to your configured AWS account/region * `npm run cdk diff` compare deployed stack with current state * `npm run cdk synth -- --all` emits the synthesized CloudFormation template for all stacks diff --git a/bin/app.ts b/bin/app.ts index 7270c6d..7a92e61 100644 --- a/bin/app.ts +++ b/bin/app.ts @@ -64,6 +64,7 @@ new PipelineStack(app, `${AppConfig.applicationName}PipelineStack`, { isDockerEnabledForSynth: AppConfig.codeBuildEnvSettings.isPrivileged, buildImage: AppConfig.codeBuildEnvSettings.buildImage, branch: repositoryStack.repositoryBranch, + primaryOutputDirectory: AppConfig.codeBuildEnvSettings.synthOutputDirectory, pipelineVariables: { ...repositoryStack.pipelineEnvVars, PROXY_SECRET_ARN: AppConfig.proxy?.proxySecretArn ?? '', diff --git a/bin/aspects.ts b/bin/aspects.ts index 83984ce..e87c79e 100644 --- a/bin/aspects.ts +++ b/bin/aspects.ts @@ -47,20 +47,6 @@ export class SecurityControls implements IAspect { if (this.stage !== STAGE.PROD) { node.applyRemovalPolicy(RemovalPolicy.DESTROY); } - node.addToResourcePolicy( - new PolicyStatement({ - sid: 'DenyUnEncryptedObjectUploads', - effect: Effect.DENY, - principals: [new AnyPrincipal()], - actions: ['s3:PutObject'], - resources: [`${node.bucketArn}/*`], - conditions: { - StringNotEquals: { - 's3:x-amz-server-side-encryption': 'aws:kms', - }, - }, - }), - ); node.addToResourcePolicy( new PolicyStatement({ sid: 'DenyHTTP', diff --git a/config/AppConfig.ts b/config/AppConfig.ts index e08e5e0..f7b9c77 100644 --- a/config/AppConfig.ts +++ b/config/AppConfig.ts @@ -10,6 +10,7 @@ import { CodeGuruSeverityThreshold } from '../lib/cdk-pipeline/core/constructs/C export const codeBuildEnvSettings: ICodeBuildEnvSettings = { isPrivileged: true, buildImage: codebuild.LinuxBuildImage.STANDARD_7_0, + synthOutputDirectory: Environment.getEnvVar('npm_package_config_synthOutputDirectory', './cdk.out'), }; const region: string = Environment.getEnvVar('AWS_REGION'); diff --git a/config/Types.ts b/config/Types.ts index 78af104..729637b 100644 --- a/config/Types.ts +++ b/config/Types.ts @@ -8,6 +8,7 @@ import { CodeGuruSeverityThreshold } from '../lib/cdk-pipeline/core/constructs/C export interface ICodeBuildEnvSettings { isPrivileged: boolean; buildImage: codebuild.IBuildImage; + synthOutputDirectory: string; } export type DeploymentStage = Exclude; // remove Exclude statement to add PROD stage to deployments diff --git a/lib/cdk-pipeline/core/CDKPipeline.ts b/lib/cdk-pipeline/core/CDKPipeline.ts index 013bfcc..6ec423d 100644 --- a/lib/cdk-pipeline/core/CDKPipeline.ts +++ b/lib/cdk-pipeline/core/CDKPipeline.ts @@ -32,6 +32,7 @@ export interface PipelineProps { codeGuruScanThreshold?: CodeGuruSeverityThreshold; vpcProps?: VpcProps; pipelineVariables?: {[key in string]: string}; + primaryOutputDirectory: string; } // ensure that VPC is detached from codebuild project on VPC deletion @@ -78,7 +79,7 @@ export class CDKPipeline extends pipelines.CodePipeline { AWS_REGION: cdk.Stack.of(scope).region, ...props.pipelineVariables, }, - primaryOutputDirectory: './cdk.out', + primaryOutputDirectory: props.primaryOutputDirectory, }), codeBuildDefaults: { ...CDKPipeline.generateVPCCodeBuildDefaults(scope, props.vpcProps), diff --git a/lib/stacks/app/constructs/PythonLambdaLayer.ts b/lib/stacks/app/constructs/PythonLambdaLayer.ts index b132c84..69591e1 100644 --- a/lib/stacks/app/constructs/PythonLambdaLayer.ts +++ b/lib/stacks/app/constructs/PythonLambdaLayer.ts @@ -25,7 +25,7 @@ export class PythonLambdaLayer extends lambda.LayerVersion { 'chmod -R 777 /tmp/pip-cache &&' + 'export PIP_CACHE_DIR=/tmp/pip-cache &&' + 'export PATH="/tmp/venv/bin:$PATH" &&' + - 'pip install pipenv && pipenv requirements > requirements.txt && pip install --platform manylinux2014_x86_64 --only-binary=:all: -r requirements.txt -t /asset-output/python', + 'pip install pipenv && pipenv requirements > requirements.txt && pip install --platform manylinux2014_x86_64 --only-binary=:all: -r requirements.txt -t /asset-output/python && rm -rf requirements.txt', ], }, }), diff --git a/licensecheck.json b/licensecheck.json index 4a885ae..713f170 100644 --- a/licensecheck.json +++ b/licensecheck.json @@ -9,6 +9,7 @@ "excludedSubProjects": [] }, "python": { + "allowedTypes": ["Pipenv"], "excluded": [], "excludedSubProjects": [] } diff --git a/package-lock.json b/package-lock.json index 584eaeb..804f8e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,23 @@ { "name": "cicd-boot", - "version": "1.1.3", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cicd-boot", - "version": "1.1.3", + "version": "1.1.4", "dependencies": { "@cloudcomponents/cdk-pull-request-approval-rule": "2.1.0", "@cloudcomponents/cdk-pull-request-check": "2.1.0", - "@types/uuid": "9.0.7", - "@typescript-eslint/visitor-keys": "6.14.0", - "aws-cdk-lib": "2.114.1", - "cdk-monitoring-constructs": "7.1.1", - "cdk-nag": "2.27.214", + "@types/uuid": "9.0.8", + "@typescript-eslint/visitor-keys": "6.20.0", + "aws-cdk-lib": "2.124.0", + "cdk-monitoring-constructs": "7.6.0", + "cdk-nag": "2.28.25", "constructs": "10.3.0", + "csv": "6.3.6", + "glob": "10.3.10", "source-map-support": "0.5.21", "uuid": "9.0.1" }, @@ -23,22 +25,22 @@ "pipeline": "bin/app.ts" }, "devDependencies": { - "@commitlint/cli": "18.4.3", - "@commitlint/config-conventional": "18.4.3", + "@commitlint/cli": "18.6.0", + "@commitlint/config-conventional": "18.6.0", "@types/jest": "29.5.11", - "@types/node": "20.10.4", + "@types/node": "20.11.10", "@types/prettier": "3.0.0", "@types/source-map-support": "0.5.10", - "@typescript-eslint/eslint-plugin": "6.14.0", - "@typescript-eslint/parser": "6.14.0", + "@typescript-eslint/eslint-plugin": "6.20.0", + "@typescript-eslint/parser": "6.20.0", "concurrently": "8.2.2", "cz-conventional-changelog": "3.3.0", - "eslint": "8.55.0", - "eslint-plugin-import": "2.29.0", + "eslint": "8.56.0", + "eslint-plugin-import": "2.29.1", "husky": "8.0.3", "jest": "29.7.0", "run-script-os": "1.1.6", - "ts-jest": "29.1.1", + "ts-jest": "29.1.2", "ts-node": "10.9.2", "typescript": "5.3.3" }, @@ -69,9 +71,9 @@ } }, "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.201", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.201.tgz", - "integrity": "sha512-INZqcwDinNaIdb5CtW3ez5s943nX5stGBQS6VOP2JDlOFP81hM3fds/9NDknipqfUkZM43dx+HgVvkXYXXARCQ==" + "version": "2.2.202", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz", + "integrity": "sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg==" }, "node_modules/@aws-cdk/asset-kubectl-v20": { "version": "2.1.2", @@ -190,9 +192,9 @@ } }, "node_modules/@babel/core": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", - "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -200,11 +202,11 @@ "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.6", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -376,14 +378,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", - "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -475,9 +477,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -664,9 +666,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -676,14 +678,14 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -720,9 +722,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.23.4", @@ -758,16 +760,16 @@ } }, "node_modules/@commitlint/cli": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.3.tgz", - "integrity": "sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.6.0.tgz", + "integrity": "sha512-FiH23cr9QG8VdfbmvJJZmdfHGVMCouOOAzoXZ3Cd7czGC52RbycwNt8YCI7SA69pAl+t30vh8LMaO/N+kcel6w==", "dev": true, "dependencies": { - "@commitlint/format": "^18.4.3", - "@commitlint/lint": "^18.4.3", - "@commitlint/load": "^18.4.3", - "@commitlint/read": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/format": "^18.6.0", + "@commitlint/lint": "^18.6.0", + "@commitlint/load": "^18.6.0", + "@commitlint/read": "^18.6.0", + "@commitlint/types": "^18.6.0", "execa": "^5.0.0", "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", @@ -782,9 +784,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", - "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.6.0.tgz", + "integrity": "sha512-CDCOf2eJz9D/TL44IBks0stM9TmdLCNE2B48owIU3YCadwzts/bobXPScagIgPQF6hhKYMEdj5zpUDlmbwuqwQ==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^7.0.2" @@ -794,12 +796,12 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.3.tgz", - "integrity": "sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.6.0.tgz", + "integrity": "sha512-Ptfa865arNozlkjxrYG3qt6wT9AlhNUHeuDyKEZiTL/l0ftncFhK/KN0t/EAMV2tec+0Mwxo0FmhbESj/bI+1g==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "ajv": "^8.11.0" }, "engines": { @@ -807,12 +809,12 @@ } }, "node_modules/@commitlint/ensure": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.3.tgz", - "integrity": "sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.6.0.tgz", + "integrity": "sha512-xY07NmOBJ7JuhX3tic021PaeLepZARIQyqpAQoNQZoml1keBFfB6MbA7XlWZv0ebbarUFE4yhKxOPw+WFv7/qw==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -824,21 +826,21 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.3.tgz", - "integrity": "sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.4.tgz", + "integrity": "sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/format": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.3.tgz", - "integrity": "sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.6.0.tgz", + "integrity": "sha512-8UNWfs2slPPSQiiVpLGJTnPHv7Jkd5KYxfbNXbmLL583bjom4RrylvyrCVnmZReA8nNad7pPXq6mDH4FNVj6xg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "chalk": "^4.1.0" }, "engines": { @@ -846,12 +848,12 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.3.tgz", - "integrity": "sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.6.0.tgz", + "integrity": "sha512-Xjx/ZyyJ4FdLuz0FcOvqiqSFgiO2yYj3QN9XlvyrxqbXTxPVC7QFEXJYBVPulUSN/gR7WXH1Udw+HYYfD17xog==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "semver": "7.5.4" }, "engines": { @@ -859,31 +861,30 @@ } }, "node_modules/@commitlint/lint": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.3.tgz", - "integrity": "sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.6.0.tgz", + "integrity": "sha512-ycbuDWfyykPmslgiHzhz8dL6F0BJYltXLVfc+M49z0c+FNITM0v+r0Vd2+Tdtq06VTc894p2+YSmZhulY8Jn3Q==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^18.4.3", - "@commitlint/parse": "^18.4.3", - "@commitlint/rules": "^18.4.3", - "@commitlint/types": "^18.4.3" + "@commitlint/is-ignored": "^18.6.0", + "@commitlint/parse": "^18.6.0", + "@commitlint/rules": "^18.6.0", + "@commitlint/types": "^18.6.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.3.tgz", - "integrity": "sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.6.0.tgz", + "integrity": "sha512-RRssj7TmzT0bowoEKlgwg8uQ7ORXWkw7lYLsZZBMi9aInsJuGNLNWcMxJxRZbwxG3jkCidGUg85WmqJvRjsaDA==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.3", - "@commitlint/execute-rule": "^18.4.3", - "@commitlint/resolve-extends": "^18.4.3", - "@commitlint/types": "^18.4.3", - "@types/node": "^18.11.9", + "@commitlint/config-validator": "^18.6.0", + "@commitlint/execute-rule": "^18.4.4", + "@commitlint/resolve-extends": "^18.6.0", + "@commitlint/types": "^18.6.0", "chalk": "^4.1.0", "cosmiconfig": "^8.3.6", "cosmiconfig-typescript-loader": "^5.0.0", @@ -896,31 +897,22 @@ "node": ">=v18" } }, - "node_modules/@commitlint/load/node_modules/@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/@commitlint/message": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.3.tgz", - "integrity": "sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.4.tgz", + "integrity": "sha512-lHF95mMDYgAI1LBXveJUyg4eLaMXyOqJccCK3v55ZOEUsMPrDi8upqDjd/NmzWmESYihaOMBTAnxm+6oD1WoDQ==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/parse": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.3.tgz", - "integrity": "sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.6.0.tgz", + "integrity": "sha512-Y/G++GJpATFw54O0jikc/h2ibyGHgghtPnwsOk3O/aU092ydJ5XEHYcd7xGNQYuLweLzQis2uEwRNk9AVIPbQQ==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -929,14 +921,13 @@ } }, "node_modules/@commitlint/read": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.3.tgz", - "integrity": "sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.6.0.tgz", + "integrity": "sha512-w39ji8VfWhPKRquPhRHB3Yd8XIHwaNHgOh28YI1QEmZ59qVpuVUQo6h/NsVb+uoC6LbXZiofTZv2iFR084jKEA==", "dev": true, "dependencies": { - "@commitlint/top-level": "^18.4.3", - "@commitlint/types": "^18.4.3", - "fs-extra": "^11.0.0", + "@commitlint/top-level": "^18.4.4", + "@commitlint/types": "^18.6.0", "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" }, @@ -945,13 +936,13 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.3.tgz", - "integrity": "sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.6.0.tgz", + "integrity": "sha512-k2Xp+Fxeggki2i90vGrbiLDMefPius3zGSTFFlRAPKce/SWLbZtI+uqE9Mne23mHO5lmcSV8z5m6ziiJwGpOcg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/config-validator": "^18.6.0", + "@commitlint/types": "^18.6.0", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", @@ -962,15 +953,15 @@ } }, "node_modules/@commitlint/rules": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.3.tgz", - "integrity": "sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.6.0.tgz", + "integrity": "sha512-pTalvCEvuCWrBWZA/YqO/3B3nZnY3Ncc+TmQsRajBdC1tkQIm5Iovdo4Ec7f2Dw1tVvpYMUUNAgcWqsY0WckWg==", "dev": true, "dependencies": { - "@commitlint/ensure": "^18.4.3", - "@commitlint/message": "^18.4.3", - "@commitlint/to-lines": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/ensure": "^18.6.0", + "@commitlint/message": "^18.4.4", + "@commitlint/to-lines": "^18.4.4", + "@commitlint/types": "^18.6.0", "execa": "^5.0.0" }, "engines": { @@ -978,18 +969,18 @@ } }, "node_modules/@commitlint/to-lines": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.3.tgz", - "integrity": "sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.4.tgz", + "integrity": "sha512-mwe2Roa59NCz/krniAdCygFabg7+fQCkIhXqBHw00XQ8Y7lw4poZLLxeGI3p3bLpcEOXdqIDrEGLwHmG5lBdwQ==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.3.tgz", - "integrity": "sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.4.tgz", + "integrity": "sha512-PBwW1drgeavl9CadB7IPRUk6rkUP/O8jEkxjlC+ofuh3pw0bzJdAT+Kw7M1Yc9KtTb9xTaqUB8uvRtaybHa/tQ==", "dev": true, "dependencies": { "find-up": "^5.0.0" @@ -999,9 +990,9 @@ } }, "node_modules/@commitlint/types": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.3.tgz", - "integrity": "sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.6.0.tgz", + "integrity": "sha512-oavoKLML/eJa2rJeyYSbyGAYzTxQ6voG5oeX3OrxpfrkRWhJfm4ACnhoRf5tgiybx2MZ+EVFqC1Lw3W8/uwpZA==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -1102,22 +1093,22 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -1138,11 +1129,100 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1421,6 +1501,26 @@ } } }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -1559,9 +1659,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1603,6 +1703,15 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1610,9 +1719,9 @@ "dev": true }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" @@ -1665,9 +1774,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" @@ -1684,9 +1793,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -1754,9 +1863,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", - "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "version": "20.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.10.tgz", + "integrity": "sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1800,9 +1909,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==" + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" }, "node_modules/@types/yargs": { "version": "17.0.32", @@ -1820,16 +1929,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz", - "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", + "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/type-utils": "6.14.0", - "@typescript-eslint/utils": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/type-utils": "6.20.0", + "@typescript-eslint/utils": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1855,15 +1964,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz", - "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", + "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4" }, "engines": { @@ -1883,13 +1992,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz", - "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", + "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1900,13 +2009,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz", - "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", + "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/utils": "6.14.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/utils": "6.20.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1927,9 +2036,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz", - "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", + "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -1939,16 +2048,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz", - "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", + "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -1965,18 +2075,42 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz", - "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", + "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", "semver": "^7.5.4" }, "engines": { @@ -1991,11 +2125,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz", - "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", "dependencies": { - "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/types": "6.20.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2013,9 +2147,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2034,9 +2168,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -2089,7 +2223,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2098,7 +2231,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2288,9 +2420,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.114.1", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.114.1.tgz", - "integrity": "sha512-pJy+Sa3+s6K9I0CXYGU8J5jumw9uQEbl8zPK8EMA+A6hP9qb1JN+a8ohyw6a1O1cb4D5S6gwH+hE7Fq7hGPY3A==", + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.124.0.tgz", + "integrity": "sha512-K/Tey8TMw30GO6UD0qb19CPhBMZhleGshz520ZnbDUJwNfFtejwZOnpmRMOdUP9f4tHc5BrXl1VGsZtXtUaGhg==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -2304,12 +2436,12 @@ "yaml" ], "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.201", + "@aws-cdk/asset-awscli-v1": "^2.2.202", "@aws-cdk/asset-kubectl-v20": "^2.1.2", "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "ignore": "^5.3.0", "jsonschema": "^1.4.1", "minimatch": "^3.1.2", @@ -2429,7 +2561,7 @@ "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.1.1", + "version": "11.2.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -2774,6 +2906,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2932,9 +3065,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001580", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz", + "integrity": "sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==", "dev": true, "funding": [ { @@ -2952,9 +3085,9 @@ ] }, "node_modules/cdk-monitoring-constructs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/cdk-monitoring-constructs/-/cdk-monitoring-constructs-7.1.1.tgz", - "integrity": "sha512-RxsVM+y4fab9S0SCZ10NZK3qdvfC3n118KQIVmPaYZ9Ms96bOU15R7NcRhDgkj7sIPapsoFRXniNsvUIExGH9g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/cdk-monitoring-constructs/-/cdk-monitoring-constructs-7.6.0.tgz", + "integrity": "sha512-3OCAffMjCXVA/g92FyaPWgiXGOvRAeWrIJzRunTpyUe3vPy53yAQkvDRGBjlUUPVK7w6Xr5y9EXWiYUaQncBgA==", "peerDependencies": { "@aws-cdk/aws-redshift-alpha": "^2.112.0-alpha.0", "aws-cdk-lib": "^2.112.0", @@ -2962,11 +3095,11 @@ } }, "node_modules/cdk-nag": { - "version": "2.27.214", - "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.27.214.tgz", - "integrity": "sha512-9AVmKeK8BBdrs2OWo0x4uN9xmvHZGLFbuiPF+V4QlYz9QiIT6TOp1lwyR/IyfevrwV8JhRwW1MQB2P1iqHknTQ==", + "version": "2.28.25", + "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.28.25.tgz", + "integrity": "sha512-TM6aKYSqSeV8Mv27gIqCbRedVquVvbvUzJA/h+dbuFP+/x+Ux4bBHY08Xd7oKI6rtNTsc7SNkj+hrQzYkzxw0Q==", "peerDependencies": { - "aws-cdk-lib": "^2.78.0", + "aws-cdk-lib": "^2.116.0", "constructs": "^10.0.5" } }, @@ -3098,7 +3231,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3109,8 +3241,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/commitizen": { "version": "4.3.0", @@ -3142,19 +3273,24 @@ "node": ">= 12" } }, - "node_modules/commitizen/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/commitizen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/commitizen/node_modules/minimist": { @@ -3179,7 +3315,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concurrently": { "version": "8.2.2", @@ -3359,7 +3496,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3369,6 +3505,35 @@ "node": ">= 8" } }, + "node_modules/csv": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.6.tgz", + "integrity": "sha512-jsEsX2HhGp7xiwrJu5srQavKsh+HUJcCi78Ar3m4jlmFKRoTkkMy7ZZPP+LnQChmaztW+uj44oyfMb59daAs/Q==", + "dependencies": { + "csv-generate": "^4.3.1", + "csv-parse": "^5.5.3", + "csv-stringify": "^6.4.5", + "stream-transform": "^3.3.0" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.3.1.tgz", + "integrity": "sha512-7YeeJq+44/I/O5N2sr2qBMcHZXhpfe38eh7DOFxyMtYO+Pir7kIfgFkW5MPksqKqqR6+/wX7UGoZm1Ot11151w==" + }, + "node_modules/csv-parse": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.3.tgz", + "integrity": "sha512-v0KW6C0qlZzoGjk6u5tLmVfyZxNgPGXZsWTXshpAgKVGmGXzaVWGdlCFxNx5iuzcXT/oJN1HHM9DZKwtAtYa+A==" + }, + "node_modules/csv-stringify": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.5.tgz", + "integrity": "sha512-SPu1Vnh8U5EnzpNOi1NDBL5jU5Rx7DVHr15DNg9LXDTAbQlAVAmEbVt16wZvEW9Fu9Qt4Ji8kmeCJ2B1+4rFTQ==" + }, "node_modules/cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", @@ -3681,10 +3846,15 @@ "node": ">=8" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/electron-to-chromium": { - "version": "1.4.612", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.612.tgz", - "integrity": "sha512-dM8BMtXtlH237ecSMnYdYuCkib2QHq0kpWfUnavjdYsyr/6OsAwg5ZGUfnQ9KD1Ga4QgB2sqXlB2NT8zy2GnVg==", + "version": "1.4.647", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.647.tgz", + "integrity": "sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw==", "dev": true }, "node_modules/emittery": { @@ -3702,8 +3872,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/error-ex": { "version": "1.3.2", @@ -3829,15 +3998,15 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -3930,9 +4099,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { "array-includes": "^3.1.7", @@ -3951,7 +4120,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -4223,9 +4392,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -4364,17 +4533,45 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=10" } }, "node_modules/fs.realpath": { @@ -4578,20 +4775,21 @@ } }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4609,6 +4807,28 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -4728,7 +4948,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -4934,6 +5155,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, "engines": { "node": ">= 4" } @@ -5162,7 +5384,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -5405,8 +5626,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -5474,6 +5694,23 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -5637,6 +5874,26 @@ } } }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -5927,6 +6184,26 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-snapshot": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", @@ -6132,6 +6409,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -6456,6 +6734,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6486,6 +6765,14 @@ "node": ">= 6" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6807,7 +7094,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -6818,6 +7104,29 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -6928,9 +7237,9 @@ } }, "node_modules/prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", - "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -6985,6 +7294,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { "node": ">=6" } @@ -7188,9 +7498,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/regexp.prototype.flags": { @@ -7338,6 +7648,26 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -7390,13 +7720,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -7428,15 +7758,18 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7451,6 +7784,7 @@ "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -7465,6 +7799,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -7475,18 +7810,20 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dev": true, "dependencies": { "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7510,7 +7847,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -7522,7 +7858,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -7605,9 +7940,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", + "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -7662,6 +7997,11 @@ "node": ">=8" } }, + "node_modules/stream-transform": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.0.tgz", + "integrity": "sha512-pG1NeDdmErNYKtvTpFayrEueAmL0xVU5wd22V7InGnatl4Ocq3HY7dcXIKj629kXvYQvglCC7CeDIGAlx1RNGA==" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7688,7 +8028,20 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7747,7 +8100,18 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7835,6 +8199,26 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/text-extensions": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", @@ -7938,9 +8322,9 @@ } }, "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", + "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -7956,7 +8340,7 @@ "ts-jest": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", @@ -8024,9 +8408,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -8198,6 +8582,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "engines": { "node": ">= 10.0.0" } @@ -8311,7 +8696,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -8383,6 +8767,23 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package-verification.json b/package-verification.json index 20aa21d..4418dc4 100644 --- a/package-verification.json +++ b/package-verification.json @@ -1 +1,8 @@ -{"package-lock.json":"405706be9c9fdb05fc2e7ed336212722e0802e1511aded95fdf28f12c653b4c8"} \ No newline at end of file +{ + "package-lock.json": "e12a181329875c25cd90f7f5efa3803ade1c8549ded46fab9d214faaf41b4f12", + "license": { + "package.json": "307c8d6250a95039c9deed4d959d599597889532bff6e1b16abe4809af70d0a5", + "src/lambda-layer/common/Pipfile": "7c7f7173749be7a9556f60e0261c7985102683def6e999ff9a03b5b593625e67", + "projectList": "24951410902869c872facab060c4533d42b1f47e5c3aed0acd572937d8ab9f15" + } +} \ No newline at end of file diff --git a/package.json b/package.json index 2fc041b..a0b638c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cicd-boot", - "version": "1.1.3", + "version": "1.1.4", "bin": { "pipeline": "bin/app.ts" }, @@ -9,7 +9,7 @@ "build": "tsc && tsc --build --clean && npm run lint", "watch": "tsc -w", "test": "jest", - "cdk": "npx aws-cdk@2.114.1", + "cdk": "npx aws-cdk@2.124.0", "validate": "npx ts-node ./scripts/package-checksum-validator.ts", "validate:fix": "ts-node ./scripts/package-checksum-generator.ts", "audit": "concurrently 'npm:audit:*(!fix)'", @@ -17,10 +17,8 @@ "audit:deps:python": "./scripts/check-deps-python.sh", "audit:scan:security": "./scripts/check-code-scan-security.sh", "audit:license": "npm run license", - "audit:fix:license": "npm run license -- -u", - "license": "run-script-os --", - "license:default": "./scripts/check-licenses.sh", - "license:macos": "./scripts/check-licenses-locally.sh", + "audit:fix:license": "npm run license -- --fix", + "license": "npx ts-node ./scripts/check-licenses.ts", "lint": "npx eslint . --ext .ts --max-warnings 0", "lint:fix": "npx eslint . --ext .ts --fix", "commitlint": "commitlint --edit" @@ -41,34 +39,36 @@ ] }, "devDependencies": { - "@commitlint/cli": "18.4.3", - "@commitlint/config-conventional": "18.4.3", + "@commitlint/cli": "18.6.0", + "@commitlint/config-conventional": "18.6.0", "@types/jest": "29.5.11", - "@types/node": "20.10.4", + "@types/node": "20.11.10", "@types/prettier": "3.0.0", "@types/source-map-support": "0.5.10", - "@typescript-eslint/eslint-plugin": "6.14.0", - "@typescript-eslint/parser": "6.14.0", + "@typescript-eslint/eslint-plugin": "6.20.0", + "@typescript-eslint/parser": "6.20.0", "concurrently": "8.2.2", "cz-conventional-changelog": "3.3.0", - "eslint": "8.55.0", - "eslint-plugin-import": "2.29.0", + "eslint": "8.56.0", + "eslint-plugin-import": "2.29.1", "husky": "8.0.3", "jest": "29.7.0", "run-script-os": "1.1.6", - "ts-jest": "29.1.1", + "ts-jest": "29.1.2", "ts-node": "10.9.2", "typescript": "5.3.3" }, "dependencies": { "@cloudcomponents/cdk-pull-request-approval-rule": "2.1.0", "@cloudcomponents/cdk-pull-request-check": "2.1.0", - "@types/uuid": "9.0.7", - "@typescript-eslint/visitor-keys": "6.14.0", - "aws-cdk-lib": "2.114.1", - "cdk-monitoring-constructs": "7.1.1", - "cdk-nag": "2.27.214", + "@types/uuid": "9.0.8", + "@typescript-eslint/visitor-keys": "6.20.0", + "aws-cdk-lib": "2.124.0", + "cdk-monitoring-constructs": "7.6.0", + "cdk-nag": "2.28.25", "constructs": "10.3.0", + "csv": "6.3.6", + "glob": "10.3.10", "source-map-support": "0.5.21", "uuid": "9.0.1" }, diff --git a/scripts/check-code-scan-security.sh b/scripts/check-code-scan-security.sh index 2d3af9f..25fb32e 100755 --- a/scripts/check-code-scan-security.sh +++ b/scripts/check-code-scan-security.sh @@ -11,9 +11,10 @@ SEMGREP_VERSION="1.52.0"; SHELLCHECK_VERSION="0.9.0.6"; BANDIT_VERSION="1.7.5"; +CURRENT_PATH=`pwd`; SCRIPT=$(readlink -f $0); SCRIPTPATH=`dirname $SCRIPT`; -PROJECT_ROOT="${SCRIPTPATH}/.."; +PROJECT_ROOT="${CURRENT_PATH}"; # It is assumed that the command is executed in the project root folder. Default behavior of the NPM run. PYTHON_COMMAND="python"; if [[ "$(python3 -V)" =~ "Python 3" ]]; then diff --git a/scripts/check-deps-python.sh b/scripts/check-deps-python.sh index 03bb397..9d3b9fb 100755 --- a/scripts/check-deps-python.sh +++ b/scripts/check-deps-python.sh @@ -3,7 +3,7 @@ ## # Make sure to add a new path to the requirements.txt in case you add a new path -# +# ## ROOT_DIR=$(pwd) @@ -39,7 +39,8 @@ $PYTHON_EXECUTABLE -m venv "$WORK_DIR/venv" > /dev/null; . $WORK_DIR/venv/bin/activate; pip install pip-audit pipenv > /dev/null; -REQUIREMENTS=`find ${ROOT_DIR} -type f -name Pipfile -not -path "*/node_modules/*" -not -path "*/cdk.out/*"`; +REQUIREMENTS=($(find "${ROOT_DIR}" -type f -name 'Pipfile' -not -path "*/node_modules/*" -not -path "*/cdk.out/*")) +echo "Matching requirements found : ${#REQUIREMENTS[@]}" if [ -z "$REQUIREMENTS" ]; then echo "No Pipfiles found." diff --git a/scripts/check-licenses-locally.sh b/scripts/check-licenses-locally.sh deleted file mode 100755 index 573e65b..0000000 --- a/scripts/check-licenses-locally.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 - -set -e - -CURRENT_PATH=`pwd` -SCRIPT=$(readlink -f $0) -SCRIPTPATH=`dirname $SCRIPT` -PROJECT_ROOT=${SCRIPTPATH}/.. - -DOCKER_COMMAND=docker; -DOCKER_IMG=aws/codebuild/standard:7.0; -DOCKERFILE_DIR=$PROJECT_ROOT/utils/license-checker; - -if [[ `$DOCKER_COMMAND images -q $DOCKER_IMG 2> /dev/null` == "" ]]; then - echo "Docker image is missing: $DOCKER_IMG"; - echo "Building..."; - - $DOCKER_COMMAND build -t $DOCKER_IMG $DOCKERFILE_DIR -fi - -exec $DOCKER_COMMAND run --rm --name cicdboot-license-checker --entrypoint "" -v ${PROJECT_ROOT}:/usr/local/app -w /usr/local/app ${DOCKER_IMG} bash -c "./scripts/check-licenses.sh $*"; \ No newline at end of file diff --git a/scripts/check-licenses.sh b/scripts/check-licenses.sh deleted file mode 100755 index 2f62fe6..0000000 --- a/scripts/check-licenses.sh +++ /dev/null @@ -1,315 +0,0 @@ -#!/bin/bash -# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 - -set -e - -################################################################################ -#### Configuration Section -################################################################################ - -CURRENT_PATH=`pwd`; -SCRIPT=$(readlink -f $0); -SCRIPTPATH=`dirname $SCRIPT`; -PROJECT_ROOT="${SCRIPTPATH}/.."; -NOTICE_FILE="$PROJECT_ROOT/NOTICE"; -SUMMARY_FILE="$PROJECT_ROOT/OSS_License_Summary.csv"; - -CONFIG_FILE="$PROJECT_ROOT/licensecheck.json"; - -NPM_LICENSE_CHECKER_TOOL=license-checker-rseidelsohn; -PYTHON_LICENSE_CHECKER_TOOL=pip-licenses; - -################################################################################ -#### END Configuration Section -################################################################################ - -ME=$(basename "$0"); -DATETIME=$(date "+%Y-%m-%d-%H-%M-%S"); - -# omit the -p parameter to create a temporal directory in the default location -WORK_DIR=`mktemp -d`; -INSTALL_LOG=$WORK_DIR/license-check.log; - -# check if tmp dir was created -if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then - echo "Could not create temp dir"; - exit 1; -fi - -# deletes the temp directory -function cleanup { - if [ -z "$debug" ]; then - if [ -z "$inconsistency" ]; then - rm -rf "$WORK_DIR"; - echo "Deleted temp working directory $WORK_DIR"; - else - echo "Temp dir $WORK_DIR is left because inconsistency found."; - fi - else - echo "Temp dir $WORK_DIR is left because debug mode activeated. Please remove it once you do not need."; - fi -} - -trap cleanup EXIT; - -################################################################################ -# Usage -################################################################################ - -function usage { - returnCode="$1"; - echo -e "\nCICD Boot License checker and Notice generation tool!"; - echo -e "\n"; - echo -e "Usage: $ME [-h][-d][-u]: - [-h]\t\t displays help (this message) - [-d]\t\t activates debug invormation - [-u]\t\t update the NOTICE File"; - exit "$returnCode"; -} - -############################################################ -# Import dependencies # -############################################################ -# source $SCRIPTPATH/lib/check-dependencies.sh - -############################################################ -# Debug information # -############################################################ -# debug_variables() print all script global variables to ease debugging -debug_variables() { - echo "USERNAME: $USERNAME"; - echo "SHELL: $SHELL"; - echo "BASH_VERSION: $BASH_VERSION"; - echo "UPDATE_NOTICE: $UPDATE_NOTICE"; - echo "WORK_DIR: $WORK_DIR"; - echo "INSTALL_LOG: $INSTALL_LOG"; - echo "NPM_LICENSE_CHECKER_TOOL: $NPM_LICENSE_CHECKER_TOOL"; - echo "PYTHON_LICENSE_CHECKER_TOOL: $PYTHON_LICENSE_CHECKER_TOOL"; - echo - echo "FAIL_ON_LICENSE_TYPES: $FAIL_ON_LICENSE_TYPES"; - echo "PACKAGE_JSONS: $PACKAGE_JSONS"; - echo "EXCLUDED_JSONS: $EXCLUDED_JSONS"; - -} - -############################################################ -# NPM section # -############################################################ - -function check_npm_package_jsons() { - echo "Checking NPM packages ..." | tee -a "$INSTALL_LOG"; - PACKAGE_JSONS=`find . -type f -name package.json -not -path "*/node_modules/*" -not -path "*/cdk.out/*"`; - - EXCLUDED_JSONS=`jq -r .npm.excludedSubProjects ${CONFIG_FILE}`; - - for PKG in $PACKAGE_JSONS - do - - if [[ $EXCLUDED_JSONS == *$PKG* ]]; then - echo "$PKG check is excluded ..." | tee -a "$INSTALL_LOG"; - continue; - fi - - PKG_DIR=`dirname $PKG`; - - check_npm_package "$PKG_DIR"; - - done - - cd "$CURRENT_PATH"; -} - -function check_npm_package() { - echo "Checking NPM package $1" | tee -a "$INSTALL_LOG"; - cd $1; - - echo "Running npm ci on the $1, to have all the Licenses available locally." | tee -a "$INSTALL_LOG"; - npm ci >> "$INSTALL_LOG"; - - if [ ! -z "$FAIL_ON_LICENSE_TYPES" ]; then - if ! npx -y $NPM_LICENSE_CHECKER_TOOL --failOn $FAIL_ON_LICENSE_TYPES >> "$INSTALL_LOG"; then - echo "Module $1 failed the license check. It containes dependency with banned license."; - exit 1; - fi - fi - - NOTICE_SUFFIX=`echo $1 | tr / -`; - TMP_NOTICE="$WORK_DIR/NOTICE.npm.$NOTICE_SUFFIX"; - TMP_NOTICE_SUM="$WORK_DIR/OSS_License_summary.npm.$NOTICE_SUFFIX"; - EXCLUDED_PACKAGES=`jq -r '.npm.excluded // [] | join(";")' ${CONFIG_FILE}`; - - echo "Packages excluded from NPM license scan: ${EXCLUDED_PACKAGES}" | tee -a "$INSTALL_LOG"; - - if [[ ! -z $EXCLUDED_PACKAGES ]]; then - npx -y $NPM_LICENSE_CHECKER_TOOL --plainVertical --excludePackages ${EXCLUDED_PACKAGES} > "$TMP_NOTICE"; - else - npx -y $NPM_LICENSE_CHECKER_TOOL --plainVertical > "$TMP_NOTICE"; - fi - - echo "#########################" > "$TMP_NOTICE_SUM"; - echo "# Node Module: \"$1\"" >> "$TMP_NOTICE_SUM"; - echo "#########################" >> "$TMP_NOTICE_SUM"; - echo "\"License\",\"Count\"" >> "$TMP_NOTICE_SUM"; - npx -y $NPM_LICENSE_CHECKER_TOOL --summary --csv | tail -n +2 | awk -F',' '{print $2}' | sort | uniq -c | sed 's/^ *//g' | sed 's/ /\, /' | awk -F', "' '{print "\""$2",\""$1"\""}' >> "$TMP_NOTICE_SUM"; - - cd "$CURRENT_PATH"; -} - -############################################################ -# PYTHON section # -############################################################ - -function check_python_requirements() { - echo "Checking Python packages ..." | tee -a "$INSTALL_LOG"; - # NPM dependencies in node_modules can have python dependencies. Ignore those. - REQUIREMENTS=`find . -type f -name Pipfile -not -path "*/node_modules/*" -not -path "*/cdk.out/*"`; - - VENV_DIR="$WORK_DIR/python-venv"; - - echo "Creating vENV at $VENV_DIR" | tee -a "$INSTALL_LOG"; - - python3 -m venv $VENV_DIR >> "$INSTALL_LOG"; - source $VENV_DIR/bin/activate >> "$INSTALL_LOG"; - export PIPENV_IGNORE_VIRTUALENVS=1; - - pip install --upgrade pip >> "$INSTALL_LOG"; - pip install $PYTHON_LICENSE_CHECKER_TOOL pipenv >> "$INSTALL_LOG"; - - EXCLUDED_JSONS=`jq -r .python.excludedSubProjects ${CONFIG_FILE}`; - - for PKG in $REQUIREMENTS - do - if [[ $EXCLUDED_JSONS == *$PKG* ]]; then - echo "$PKG check is excluded ..." | tee -a "$INSTALL_LOG"; - continue; - fi - - PKG_DIR=`dirname $PKG`; - pushd "${PKG_DIR}"; - check_python_module "$PKG_DIR"; - popd; - done - - deactivate >> "$INSTALL_LOG"; - cd "$CURRENT_PATH"; -} - -function check_python_module() { - echo "Checking Python module $1" | tee -a "$INSTALL_LOG"; - - SUFFIX=`echo $1 | tr / -`; - - pipenv sync >> "$INSTALL_LOG"; - - PIPENV_VENV=`pipenv --venv`; - - if [ ! -z "$FAIL_ON_LICENSE_TYPES" ]; then - if ! $PYTHON_LICENSE_CHECKER_TOOL --python="$PIPENV_VENV/bin/python" --fail-on='$FAIL_ON_LICENSE_TYPES' >> "$INSTALL_LOG" ; then - echo "Module $1 failed the license check. It containes dependency with banned license."; - exit 1; - fi - fi - TMP_NOTICE="$WORK_DIR/NOTICE.pip.$SUFFIX"; - TMP_NOTICE_SUM="$WORK_DIR/OSS_License_summary.pip.$SUFFIX"; - - $PYTHON_LICENSE_CHECKER_TOOL --python="$PIPENV_VENV/bin/python" --format=plain-vertical --with-license-file --no-license-path > "$TMP_NOTICE"; - - echo "#########################" > "$TMP_NOTICE_SUM"; - echo "# Python Module: \"$1\"" >> "$TMP_NOTICE_SUM"; - echo "#########################" >> "$TMP_NOTICE_SUM"; - $PYTHON_LICENSE_CHECKER_TOOL --python="$PIPENV_VENV/bin/python" --summary -f csv | awk -F"," '{print $2","$1}' >> "$TMP_NOTICE_SUM"; -} - -################################################################################ -# Notices consistency -################################################################################ -function create_holistic_notice() { - echo "Merging files: NOTICE of NPM and Python ..." | tee -a "$INSTALL_LOG"; - - FILES=`find "$WORK_DIR" -type f -iname "NOTICE.*" | sort`; - - echo "$FILES"; - - for f in $FILES - do - cat $f >> "$1"; - done -} - -function create_holistic_summary() { - echo "Merging files: OSS_License_summary of NPM and Python ..." | tee -a "$INSTALL_LOG"; - - FILES=`find "$WORK_DIR" -type f -iname "OSS_License_summary.*" | sort`; - - echo "$FILES"; - - for f in $FILES - do - cat $f >> "$1"; - done -} - -function check_notice_consistency() { - NEW_NOTICE_FILE="$WORK_DIR/NOTICE"; - - create_holistic_notice "$NEW_NOTICE_FILE"; - - NEW_SUMMARY_FILE="$WORK_DIR/OSS_License_summary"; - create_holistic_summary "$NEW_SUMMARY_FILE"; - - if diff -qw "$NOTICE_FILE" "$NEW_NOTICE_FILE"; then - echo "$NOTICE_FILE is up to date!" | tee -a "$INSTALL_LOG"; - - cat "$NEW_SUMMARY_FILE" | tee -a "$INSTALL_LOG"; - else - echo "$NOTICE_FILE is not up to date!" | tee -a "$INSTALL_LOG"; - if [ ! -z "$UPDATE_NOTICE" ]; then - echo "Updating $NOTICE_FILE" | tee -a "$INSTALL_LOG"; - cp -rf "$NEW_NOTICE_FILE" "$NOTICE_FILE"; - echo "Updating $SUMMARY_FILE" | tee -a "$INSTALL_LOG"; - cp -rf "$NEW_SUMMARY_FILE" "$SUMMARY_FILE"; - else - echo "Diff is: " | tee -a "$INSTALL_LOG"; - diff -w "$NOTICE_FILE" "$NEW_NOTICE_FILE" | tee -a "$INSTALL_LOG"; - echo "Check the log $INSTALL_LOG for more details" | tee -a "$INSTALL_LOG"; - inconsistency=true; - exit 1; - fi - fi -} - -################################################################################ -# MAIN -################################################################################ - -while getopts "hdu" opt; do - case $opt in - h) - usage 0 - ;; - d) - debug=true - ;; - u) - UPDATE_NOTICE=true - ;; - *) - echo "Invalid option: -$OPTARG" - usage 1 - ;; - esac -done - -# check_dependencies - -FAIL_ON_LICENSE_TYPES=`jq -r ".failOnLicenses | join(\";\")" ${CONFIG_FILE}`; - -echo "Scanning for licenses in dependencies"; - -check_npm_package_jsons; -check_python_requirements; -check_notice_consistency; - -if [ ! -z "$debug" ]; then - debug_variables; -fi diff --git a/scripts/check-licenses.ts b/scripts/check-licenses.ts new file mode 100644 index 0000000..820ddc7 --- /dev/null +++ b/scripts/check-licenses.ts @@ -0,0 +1,955 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: MIT-0 + +// ESLint must be disabled while the https://github.com/adaltas/node-csv/issues/323 has not been solved +/* eslint-disable */ +import { SpawnSyncOptions, spawnSync } from 'child_process'; +import { createHash } from 'crypto'; +import { existsSync, mkdirSync, mkdtempSync, rmSync, readFileSync, openSync, writeFileSync, readdirSync, statSync } from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { parse, stringify } from 'csv/sync'; +import * as glob from 'glob'; + +const NPM_LICENSE_CHECKER_TOOL = 'license-checker-rseidelsohn'; +const PYTHON_LICENSE_CHECKER_TOOL = 'pip-licenses'; + +// 5 min timeout +const GLOBAL_TIMEOUT = { timeout: 5 * 60 * 1000 }; +const DEFAULT_EXCLUDED_FOLDERS = ['node_modules/**', 'cdk.out/**', '.git/**', 'dist/**', 'docs/**', 'bin/**', 'tmp/**']; + +interface ScanningContext { + readonly projectRoot: string; + readonly workingDir: string; + readonly pip: string; + readonly python: string; +} + +interface LicenseConfig { + readonly failOnLicenses: string[]; + readonly npm: { + excluded: string[]; + excludedSubProjects: string[]; + }; + readonly python: { + allowedTypes: string[]; + excluded: string[]; + excludedSubProjects: string[]; + }; + excludeFolders: string[]; +} + +const VERIFICATION_FILE = './package-verification.json'; +const LICENSE_FILES_SUMMARY_HASH = 'projectList'; + +const DEFAULT_LICENSE_FILE = { + failOnLicenses: [ + 'AGPL', + 'GNU AGPL', + 'APPLE PUBLIC SOURCE LICENSE', + 'APSL-2.0', + 'CDLA-Sharing-1.0', + 'CPAL-1.0', + 'MIT-enna', + 'EUPL-1.1', + 'EUPL-1.2', + 'LGPL-3.0-only', + 'LGPL-3.0-or-later', + 'GPL-3.0-only', + 'GPL-3.0-or-later', + 'HPL', + 'NASA-1.3', + 'ODbL-1.0', + 'OSL-3.0', + 'Parity-7.0.0', + 'RPSL-1.0', + 'SSPL-1.0', + 'BUSL-1.1', + 'Commons Clause', + 'CRAPL', + 'CC-BY-NC-1.0', + 'CC-BY-NC-2.0', + 'CC-BY-NC-2.5', + 'CC-BY-NC-3.0', + 'CC-BY-NC-4.0', + 'Elastic-2.0', + 'Hugging Face Optimized Inference', + 'HFOILv1.0', + 'Prosperity Public', + 'Redis Source Available', + 'UC Berkeley', + ], + npm: { + excluded: [], + excludedSubProjects: [], + }, + python: { + allowedTypes: ["Pipenv"], + excluded: [], + excludedSubProjects: [], + }, +}; + +class CliHelpers { + static getPythonCommand() { + // 1 min timeout + const TIMEOUT = { timeout: 5 * 60 * 1000 }; + const python3Results = spawnSync('python3', ['-v'], { + encoding: 'utf8', + ...TIMEOUT, + }); + + if (python3Results.status === 0 && python3Results.output.find((line) => line?.match('.*Python 3.*'))) { + return { + pythonExecutable: 'python3', + pipExecutable: 'pip3', + }; + } else { + const pythonResults = spawnSync('python', ['-v'], { + encoding: 'utf8', + ...TIMEOUT, + }); + + if (pythonResults.status !== 0) { + console.error('Python is not installed. Security checks will not be executed'); + throw new Error('Python is not installed. Security checks will not be executed'); + } + return { + pythonExecutable: 'python', + pipExecutable: 'pip', + }; + } + } + + static findRecursively(match: string, directory: string, excludes?: string, maxDept: number = 8) { + const matches: string[] = []; + + function throughDirectory(dir: string, level: number = 0) { + if (excludes && dir.match(excludes)) { + return; + } + + if (level > maxDept) { + return; + } + + readdirSync(dir).forEach((file) => { + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const absolute = path.join(dir, file); + + if (file.match(match)) { + matches.push(absolute); + } else if (statSync(absolute).isDirectory()) { + throughDirectory(absolute, level + 1); + } + }); + } + + throughDirectory(directory, 0); + + return matches; + } + + static generateChecksum(filePath: string) { + const checksum = createHash('sha256'); + checksum.update(readFileSync(filePath)); + return checksum.digest('hex'); + } + + static generateChecksumForText(text: string) { + const checksum = createHash('sha256'); + checksum.update(text); + return checksum.digest('hex'); + } + + static persistChecksum(verificationFile: string, checksumKey: string, checksumValue: string) { + let checkSumState: Record = {}; + if (existsSync(verificationFile)) { + checkSumState = JSON.parse(readFileSync(verificationFile, { encoding: 'utf8' })) as Record; + } + + checkSumState[checksumKey] = checksumValue; + + writeFileSync(verificationFile, JSON.stringify(checkSumState, null, 2)); + } +} + +class LicenseChecker { + readonly licenseCheckerConfiguration: LicenseConfig; + + private verificationJson: Record; // eslint-disable-line + private licenseSection: Record; + + private newLicensesSection: Record = {}; + + constructor( + readonly configFile: string = './licensecheck.json', + readonly force: boolean = false, + readonly fix: boolean = true, + readonly debug: boolean = false, + ) { + if (!existsSync(configFile)) { + console.log(`License checker configuration file ${configFile} does not exist. Creating one ...`); + writeFileSync(configFile, JSON.stringify(DEFAULT_LICENSE_FILE)); + } + + this.licenseCheckerConfiguration = JSON.parse(readFileSync(configFile, { encoding: 'utf8' })); + + this.licenseCheckerConfiguration.excludeFolders = [ + ...DEFAULT_EXCLUDED_FOLDERS, + ...(this.licenseCheckerConfiguration.excludeFolders || []), + ]; + + this.licenseCheckerConfiguration.python.allowedTypes = [ + ...(this.licenseCheckerConfiguration.python.allowedTypes || ["Pipenv"]) + ] + } + + scan() { + return this.createScanningEnvironment((context) => { + const npmProjectsToCheck = this.collectNpmPackageJsons(context); + + const pythonProjectsToCheck = this.collectPythonPackages(context); + + const verifyHashCodes = this.checkHasPackageFileUpdated(context, [ + ...npmProjectsToCheck, + ...pythonProjectsToCheck, + ]); + + if (verifyHashCodes) { + console.log('Licenses are out of sync.'); + } + + if (this.force || (verifyHashCodes && this.fix)) { + console.log('Licenses are regenerating ...'); + this.runCheckLicenses(context, npmProjectsToCheck, pythonProjectsToCheck); + + this.mergeLicenseFiles(context); + + this.updateVerificationJson(); + console.log('Licenses have been regenerated.'); + } else if (verifyHashCodes) { + console.log('Licenses check failed.'); + return 1; + } else { + console.log('Licenses are up to date.'); + } + + return 0; + }); + } + + /** + * Scans the working directory and all subfolder for existing package.json files. + * + * @param context scanning environment context + * @returns + */ + private collectNpmPackageJsons(context: ScanningContext) { + const packageJsons = glob.sync('**/package.json', { + cwd: context.projectRoot, + ignore: this.licenseCheckerConfiguration.excludeFolders, + absolute: true, + }); + + return packageJsons.filter( + (jsonPath) => + !this.licenseCheckerConfiguration.npm.excludedSubProjects.find((exclude) => jsonPath.endsWith(exclude)), + ); + } + + /** + * Scans the working directory and all subfolder for existing Pipfile of requirements.txt + * + * @param context scanning environment context + * @returns + */ + private collectPythonPackages(context: ScanningContext) { + const lookup = this.licenseCheckerConfiguration.python.allowedTypes.map((pkgType) => { switch(pkgType) { + case "Pipenv": return '**/Pipfile'; + case "requirements.txt": return '**/requirements.txt'; + default: throw new Error(`Unsupported type ${pkgType}.`) + }}); + + const pythonPackages = glob.sync(lookup, { + cwd: context.projectRoot, + ignore: this.licenseCheckerConfiguration.excludeFolders, + absolute: true, + }); + + return pythonPackages.filter( + (jsonPath) => + !this.licenseCheckerConfiguration.python.excludedSubProjects.find((exclude) => jsonPath.endsWith(exclude)), + ); + } + + /** + * Checks is there any project file (package.json or Pipfile or requirements.txt) which has been modified. + * The state is maintained in the package-verification.json file. + * + * @param context scanning environment context + * @param projectFiles list of package.json or Pipfile or requirements.txt + * @returns + */ + private checkHasPackageFileUpdated(context: ScanningContext, projectFiles: string[]) { + if (!existsSync(VERIFICATION_FILE)) { + this.verificationJson = {}; + } else { + this.verificationJson = JSON.parse(readFileSync(VERIFICATION_FILE, { encoding: 'utf8' })); + } + + this.licenseSection = this.verificationJson.license || {}; + + let result = false; + + let projectFilesList = ''; + projectFiles.forEach((projectFile) => { + const projectRelativePath = path.relative(context.projectRoot, projectFile); + const verifiedHashCode = this.licenseSection[projectRelativePath]; + + const currentHashCode = CliHelpers.generateChecksum(projectFile); + + this.newLicensesSection[projectRelativePath] = currentHashCode; + if (verifiedHashCode !== currentHashCode) { + console.log(`File ${projectFile} has changed since last scan.`); + result = true; + } + + projectFilesList += projectRelativePath; + }); + + const currentHashCodeOfProjectFiles = CliHelpers.generateChecksumForText(projectFilesList); + + const verifiedHashCode = this.licenseSection[LICENSE_FILES_SUMMARY_HASH]; + + this.newLicensesSection[LICENSE_FILES_SUMMARY_HASH] = currentHashCodeOfProjectFiles; + if (verifiedHashCode !== currentHashCodeOfProjectFiles) { + console.log('Source of licenses has changed since last scan.'); + result = true; + } + + return result; + } + + private updateVerificationJson() { + this.verificationJson.license = this.newLicensesSection; + writeFileSync(VERIFICATION_FILE, JSON.stringify(this.verificationJson, null, 2), { encoding: 'utf-8' }); + } + + /** + * Orchestrates the license checking of the projects + * + * @param context scanning environment context + * @param npmProjectsToCheck list of NPM projects to verify + * @param pythonProjectsToCheck list of Python projects to verify + */ + private runCheckLicenses(context: ScanningContext, npmProjectsToCheck: string[], pythonProjectsToCheck: string[]) { + console.log('Scanning NPM packages...'); + + npmProjectsToCheck.forEach((npmProjectToCheck) => this.runNPMLicenseCheck(context, npmProjectToCheck)); + + if (pythonProjectsToCheck.length > 0) { + console.log('Scanning Python packages...'); + this.installPythonLibsForLicenseCheck(context); + pythonProjectsToCheck.forEach((pythonProjectToCheck) => + this.runPythonLicenseCheck(context, pythonProjectToCheck), + ); + } + } + + /** + * Installs the NPM dependencies as that is required to be locally present for the license chacker tool + * + * @param projectWorkingDirectory working directory of the folder + */ + private runNPMCI(projectWorkingDirectory: string) { + console.log(`Running NPM CI in folder ${projectWorkingDirectory}`); + const commandArgs = ['ci']; + + const command = 'npm'; + + const options: SpawnSyncOptions = { + encoding: 'utf8', + stdio: 'inherit', + timeout: 5 * 60 * 1000, + cwd: projectWorkingDirectory, + }; + + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const commandResults = spawnSync(command, commandArgs, options); + + if (commandResults.status !== 0) { + console.error('Failed to run NPM CI.'); + throw new Error('Failed to run NPM CI.'); + } + } + + /** + * Collect the licenses of the NPM dependencies of the project. + * When the NPM project doesn't have an package-lock.json or npm-shrinkwrap.json file then it is assumed that all of it is dependencies are listed in a higher level of package.json. + * + * @param context scanning environment context + * @param npmProjectToCheck NPM project to check + * @returns + */ + private runNPMLicenseCheck(context: ScanningContext, npmProjectToCheck: string) { + const projectRelativePath = path.relative(context.projectRoot, npmProjectToCheck); + const projectFolder = path.dirname(projectRelativePath); + const noticeSuffix = projectRelativePath.replace(/\//g, '-'); + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const tmpNoticeLocation = path.join(context.workingDir, `NOTICE.npm.${noticeSuffix}`); + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const tmpNoticeSummaryLocation = path.join(context.workingDir, `OSS_License_Summary.npm.${noticeSuffix}.csv`); + + console.log(`Checking licenses in ${npmProjectToCheck}`); + if ( + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + existsSync(path.join(context.projectRoot, projectFolder, 'package-lock.json')) || + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + existsSync(path.join(context.projectRoot, projectFolder, 'npm-shrinkwrap.json')) + ) { + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + this.runNPMCI(path.join(context.projectRoot, projectFolder)); + } else { + console.log( + `NPM project ${npmProjectToCheck} doesn't have a lock file (package-lock.json or npm-shrinkwrap.json).`, + ); + console.log("It is assumed that their dependencies as part of another project's dependency list."); + console.log('If this is not the case, please create the lock file with executing npm install.'); + + return; + } + + this.checkedNPMBannedLicenses(context, projectRelativePath, projectFolder); + this.generateNPMNotice(context, projectRelativePath, projectFolder, tmpNoticeLocation); + this.generateNPMSummary(context, projectRelativePath, projectFolder, tmpNoticeSummaryLocation); + } + + /** + * Generates the summary of the various license types used in the NPM project + * + * @param context scanning environment context + * @param npmProjectFile NPM project file relative location + * @param npmPackageFolder NPM project folder + * @param tmpNoticeSummaryLocation temporary location of the summary file + */ + private generateNPMSummary( + context: ScanningContext, + npmProjectFile: string, + npmPackageFolder: string, + tmpNoticeSummaryLocation: string, + ) { + const commandArgs = ['-y', NPM_LICENSE_CHECKER_TOOL, '--summary', '--csv', '--start', npmPackageFolder]; + + if (this.licenseCheckerConfiguration.npm.excluded && this.licenseCheckerConfiguration.npm.excluded.length != 0) { + const excludedPackages = this.licenseCheckerConfiguration.npm.excluded.join(';'); + commandArgs.push('--excludePackages', excludedPackages); + } + + const options: SpawnSyncOptions = { + encoding: 'utf8', + stdio: ['ignore', openSync(tmpNoticeSummaryLocation, 'a'), 'inherit'], + ...GLOBAL_TIMEOUT, + }; + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const commandResults = spawnSync('npx', commandArgs, options); + + if (commandResults.status !== 0) { + console.error(`Module ${npmProjectFile} failed the license check.`); + throw new Error(`Module ${npmProjectFile} failed the license check.`); + } + + const csvValues = parse(readFileSync(tmpNoticeSummaryLocation, { encoding: 'utf8' }), { + delimiter: ',', + columns: true, + }); + + const licenseSummary: Record = {}; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + csvValues.forEach((rows: { [x: string]: any }) => { + const license = rows.license; + if (license) { + const count = licenseSummary[license] || 0; + licenseSummary[license] = count + 1; + } + }); + + let output = '#########################\n'; + output += `# NPM module: ${npmProjectFile}\n`; + output += '#########################\n'; + output += stringify( + Object.entries(licenseSummary) + .sort() + .map(([license, count]) => ({ License: license, Count: count })), + { header: true, quoted: true }, + ); + writeFileSync(tmpNoticeSummaryLocation, output); + } + + /** + * Generates the temporary NOTICE file based on the dependencies used in the NPM project + * + * @param context scanning environment context + * @param npmProjectFile NPM project file relative location + * @param npmPackageFolder NPM project folder + * @param tmpNoticeLocation temporary location of the NOTICE file + */ + private generateNPMNotice( + context: ScanningContext, + npmProjectFile: string, + npmPackageFolder: string, + tmpNoticeLocation: string, + ) { + const commandArgs = ['-y', NPM_LICENSE_CHECKER_TOOL, '--plainVertical']; + + if (this.licenseCheckerConfiguration.npm.excluded && this.licenseCheckerConfiguration.npm.excluded.length != 0) { + const excludedPackages = this.licenseCheckerConfiguration.npm.excluded.join(';'); + commandArgs.push('--excludePackages', excludedPackages); + } + + const options: SpawnSyncOptions = { + cwd: npmPackageFolder, + encoding: 'utf8', + stdio: ['ignore', openSync(tmpNoticeLocation, 'w+'), 'inherit'], + ...GLOBAL_TIMEOUT, + }; + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const commandResults = spawnSync('npx', commandArgs, options); + + if (commandResults.status !== 0) { + console.error(`Module ${npmProjectFile} failed the license check.`); + throw new Error(`Module ${npmProjectFile} failed the license check.`); + } + } + + /** + * Verifies there are no banned Licenses across the dependencies used. + * + * @param context scanning environment context + * @param npmProjectFile NPM project file relative location + * @param projectFolder NPM project file relative location + */ + private checkedNPMBannedLicenses(context: ScanningContext, npmProjectFile: string, projectFolder: string) { + const commandArgs = [ + '-y', + NPM_LICENSE_CHECKER_TOOL, + '--failOn', + this.licenseCheckerConfiguration.failOnLicenses.join(';'), + ]; + + if (this.licenseCheckerConfiguration.npm.excluded && this.licenseCheckerConfiguration.npm.excluded.length != 0) { + const excludedPackages = this.licenseCheckerConfiguration.npm.excluded.join(';'); + commandArgs.push('--excludePackages', excludedPackages); + } + + const options: SpawnSyncOptions = { + cwd: projectFolder, + encoding: 'utf8', + stdio: ['ignore', 'ignore', 'inherit'], + ...GLOBAL_TIMEOUT, + }; + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const commandResults = spawnSync('npx', commandArgs, options); + + if (commandResults.status !== 0) { + console.error(`Project ${npmProjectFile} failed the license check. It contains dependency with banned license.`); + throw new Error( + `Project ${npmProjectFile} failed the license check. It contains dependency with banned license.`, + ); + } + } + + /** + * Installs the python dependencies used to do the license checking into the venv + * + * @param context scanning environment context + */ + private installPythonLibsForLicenseCheck(context: ScanningContext) { + const pipExecutable = context.pip; + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const pipUpgrade = spawnSync(pipExecutable, ['install', '--upgrade', 'pip'], { + stdio: 'ignore', + encoding: 'utf8', + ...GLOBAL_TIMEOUT, + }); + + if (pipUpgrade.status !== 0) { + throw new Error(`Failed to upgrade pip because ${pipUpgrade.stderr}`); + } + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const pipInstall = spawnSync(pipExecutable, ['install', PYTHON_LICENSE_CHECKER_TOOL, 'pipenv'], { + encoding: 'utf8', + ...GLOBAL_TIMEOUT, + }); + + if (pipInstall.status !== 0) { + throw new Error(`Failed to install ${PYTHON_LICENSE_CHECKER_TOOL} and pipenv because ${pipInstall.stderr}`); + } + } + + /** + * Collect the licenses of the Python project + * + * @param context scanning environment context + * @param pythonProjectToCheck Python project to check + */ + private runPythonLicenseCheck(context: ScanningContext, pythonProjectToCheck: string) { + const projectRelativePath = path.relative(context.projectRoot, pythonProjectToCheck); + const noticeSuffix = projectRelativePath.replace(/\//g, '-'); + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const tmpNoticeLocation = path.join(context.workingDir, `NOTICE.python.${noticeSuffix}`); + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const tmpNoticeSummaryLocation = path.join(context.workingDir, `OSS_License_Summary.python.${noticeSuffix}.csv`); + + console.log(`Checking licenses in ${pythonProjectToCheck}`); + process.env.PIPENV_IGNORE_VIRTUALENVS = '1'; + const venvLocation = this.installPythonDependencies(context, projectRelativePath, noticeSuffix); + this.checkedPythonBannedLicenses(context, projectRelativePath, venvLocation); + this.generatePythonNotice(context, projectRelativePath, venvLocation, tmpNoticeLocation); + this.generatePythonSummary(context, projectRelativePath, venvLocation, tmpNoticeSummaryLocation); + } + + /** + * Install the dependencies for the Python project` + * + * @param context scanning environment context + * @param pythonProjectToCheck Python project to check + * @param noticeSuffix suffix to be used to create venv if not pipenv is used + * @returns + */ + private installPythonDependencies(context: ScanningContext, pythonProjectToCheck: string, noticeSuffix: string) { + if (pythonProjectToCheck.endsWith('Pipfile')) { + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const pipenvSync = spawnSync(path.join(context.workingDir, '.venv', 'bin', 'pipenv'), ['sync'], { + cwd: path.dirname(pythonProjectToCheck), + }); + + if (pipenvSync.status !== 0) { + throw new Error(`Failed to synchronize pipenv ${pythonProjectToCheck}`); + } + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const pipenvSyncVenvLocation = spawnSync(path.join(context.workingDir, '.venv', 'bin', 'pipenv'), ['--venv'], { + cwd: path.dirname(pythonProjectToCheck), + stdio: 'pipe', + encoding: 'utf8', + }); + + if (pipenvSyncVenvLocation.status !== 0) { + throw new Error(`Failed to retrieve pipenv venv location for ${pythonProjectToCheck}`); + } + + return pipenvSyncVenvLocation.stdout.trim(); + } else if (pythonProjectToCheck.endsWith('requirements.txt')) { + const venvFolder = '.venv-' + noticeSuffix; + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const venvLocation = path.join(context.workingDir, venvFolder); + + const pythonCommand = context.python; + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const vEnvCreation = spawnSync(pythonCommand, ['-m', 'venv', venvLocation]); + + if (vEnvCreation.status !== 0) { + throw new Error(`Failed to create virtual environment ${venvLocation}`); + } + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const pipInstall = spawnSync(path.join(venvLocation, 'bin', 'pip'), ['install', '-r', pythonProjectToCheck], { + cwd: context.projectRoot, + stdio: 'inherit', + encoding: 'utf8', + ...GLOBAL_TIMEOUT, + }); + + if (pipInstall.status !== 0) { + throw new Error(`Failed to install dependencies listed in ${pythonProjectToCheck}`); + } + + return venvLocation; + } else { + throw new Error(`Python package ${pythonProjectToCheck} is not a Pipfile or requirements.txt file.`); + } + } + + /** + * Verifies there are no banned Licenses across the dependencies used. + * + * @param context scanning environment context + * @param pythonProjectToCheck Python project file relative location + * @param venvLocation location of the virtual environment + */ + private checkedPythonBannedLicenses(context: ScanningContext, pythonProjectToCheck: string, venvLocation: string) { + const commandArgs = [ + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + `--python=${path.join(venvLocation, 'bin', 'python')}`, + `--fail-on=${this.licenseCheckerConfiguration.failOnLicenses.join(';')}`, + ]; + + this.addPythonPackageExclusion(commandArgs); + + const options: SpawnSyncOptions = { + encoding: 'utf8', + stdio: 'inherit', + ...GLOBAL_TIMEOUT, + }; + const commandResults = spawnSync( + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + path.join(context.workingDir, '.venv', 'bin', PYTHON_LICENSE_CHECKER_TOOL), + commandArgs, + options, + ); + + if (commandResults.status !== 0) { + console.error( + `Module ${pythonProjectToCheck} failed the license check. It contains dependency with banned license.`, + ); + throw new Error( + `Module ${pythonProjectToCheck} failed the license check. It contains dependency with banned license.`, + ); + } + } + + /** + * Extends the base list of command line arguments to exclude packages from the license check + * + * @param commandArgs base list of command line arguments + */ + private addPythonPackageExclusion(commandArgs: string[]) { + if ( + this.licenseCheckerConfiguration.python.excluded && + this.licenseCheckerConfiguration.python.excluded.length != 0 + ) { + commandArgs.push('--ignore-packages', ...this.licenseCheckerConfiguration.python.excluded); + } + } + + /** + * Generates the summary of the various license types used in the Python project + * + * @param context scanning environment context + * @param pythonProjectToCheck Python project file relative location + * @param venvLocation location of the virtual environment + * @param tmpNoticeSummaryLocation temporary location of the summary file + */ + private generatePythonSummary( + context: ScanningContext, + pythonProjectToCheck: string, + venvLocation: string, + tmpNoticeSummaryLocation: string, + ) { + const commandArgs = [ + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + `--python=${path.join(venvLocation, 'bin', 'python')}`, + '--summary', + '-f', + 'csv', + ]; + + this.addPythonPackageExclusion(commandArgs); + + const options: SpawnSyncOptions = { + encoding: 'utf8', + stdio: ['ignore', openSync(tmpNoticeSummaryLocation, 'w'), 0], + ...GLOBAL_TIMEOUT, + }; + + const commandResults = spawnSync( + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + path.join(context.workingDir, '.venv', 'bin', PYTHON_LICENSE_CHECKER_TOOL), + commandArgs, + options, + ); + + if (commandResults.status !== 0) { + console.error(`Module ${pythonProjectToCheck} failed the license check.`); + throw new Error(`Module ${pythonProjectToCheck} failed the license check.`); + } + + const csvValues = parse(readFileSync(tmpNoticeSummaryLocation, { encoding: 'utf8' }), { + delimiter: ',', + columns: true, + quote: true, + }); + + let output = '#########################\n'; + output += `# Python module: ${pythonProjectToCheck}\n`; + output += '#########################\n'; + output += stringify( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Object.entries(csvValues).map((row: any) => ({ + License: row[1].License, + Count: row[1].Count, + })), + { header: true, quoted: true }, + ); + writeFileSync(tmpNoticeSummaryLocation, output); + } + + /** + * Generates the temporary NOTICE file based on the dependencies used in the Python project + * + * @param context scanning environment context + * @param pythonProjectToCheck Python project file relative location + * @param venvLocation location of the virtual environment + * @param tmpNoticeLocation temporary location of the NOTICE file + */ + private generatePythonNotice( + context: ScanningContext, + pythonProjectToCheck: string, + venvLocation: string, + tmpNoticeLocation: string, + ) { + const commandArgs = [ + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + `--python=${path.join(venvLocation, 'bin', 'python')}`, + '--format=plain-vertical', + '--with-license-file', + '--no-license-path', + ]; + + this.addPythonPackageExclusion(commandArgs); + + const options: SpawnSyncOptions = { + encoding: 'utf8', + stdio: ['ignore', openSync(tmpNoticeLocation, 'w'), 0], + ...GLOBAL_TIMEOUT, + }; + + const commandResults = spawnSync( + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + path.join(context.workingDir, '.venv', 'bin', PYTHON_LICENSE_CHECKER_TOOL), + commandArgs, + options, + ); + + if (commandResults.status !== 0) { + console.error(`Module ${pythonProjectToCheck} failed the license check.`); + throw new Error(`Module ${pythonProjectToCheck} failed the license check.`); + } + } + + private createScanningEnvironment(scanning: (context: ScanningContext) => number) { + let workingDir; + let exitCode = 0; + try { + if (this.debug) { + workingDir = path.join(process.cwd(), 'license-debug'); + + if (existsSync(workingDir)) { + rmSync(workingDir, { recursive: true }); + } + + mkdirSync(workingDir); + } else { + workingDir = mkdtempSync(path.join(os.tmpdir(), 'license')); + } + + const venvLocation = path.join(workingDir, '.venv'); + + const pythonCommands = CliHelpers.getPythonCommand(); + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const vEnvCreation = spawnSync(pythonCommands.pythonExecutable, ['-m', 'venv', venvLocation]); + + if (vEnvCreation.status !== 0) { + throw new Error(`Failed to create virtual environment ${venvLocation}`); + } + + exitCode = scanning({ + projectRoot: process.cwd(), + workingDir: workingDir, + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + pip: path.join(venvLocation, 'bin', pythonCommands.pipExecutable), + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + python: path.join(venvLocation, 'bin', pythonCommands.pythonExecutable), + }); + } catch (error) { + console.error(error); + console.error('License scan failed'); + exitCode = 1; + } finally { + if (workingDir && !this.debug) { + rmSync(workingDir, { recursive: true }); + } + } + + return exitCode; + } + + /** + * Merging temporary files together to provide the final files + * + * @param context scanning environment context + */ + private mergeLicenseFiles(context: ScanningContext) { + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const licenseFiles = glob.sync(path.join(context.workingDir, 'NOTICE.*')); + + let output = ''; + + licenseFiles.sort().forEach((file) => { + const fileContent = readFileSync(file, { encoding: 'utf8' }); + output += fileContent; + }); + + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + writeFileSync(path.join(context.projectRoot, 'NOTICE'), output); + + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + const licenseSummaryFiles = glob.sync(path.join(context.workingDir, 'OSS_License_Summary.*')); + + let outputSummary = ''; + + licenseSummaryFiles.sort().forEach((file) => { + const fileContent = readFileSync(file, { encoding: 'utf8' }); + outputSummary += fileContent; + }); + + // Suppressed as no user input it used to manage the path and child_process + // nosemgrep + writeFileSync(path.join(context.projectRoot, 'OSS_License_Summary.csv'), outputSummary); + } +} + +const args = process.argv.slice(2); + +const result = new LicenseChecker( + './licensecheck.json', + args.find(arg => arg === '--force') != undefined, + args.find(arg => arg === '--fix') != undefined, + args.find(arg => arg === '--debug') != undefined, +).scan(); + +if (result) { + console.error('License validation failed.'); + process.exit(result); +} diff --git a/scripts/configure.sh b/scripts/configure.sh index 866a277..a7fda3e 100755 --- a/scripts/configure.sh +++ b/scripts/configure.sh @@ -10,7 +10,7 @@ set -e CURRENT_PATH=`pwd` SCRIPT=$(readlink -f "$0") SCRIPTPATH=`dirname "$SCRIPT"` -PROJECT_ROOT="${SCRIPTPATH}/.." +PROJECT_ROOT="${CURRENT_PATH}"; # It is assumed that the command is executed in the project root folder. Default behavior of the NPM run. # TEMPLATE PACKAGE_JSON_TEMPLATE="$PROJECT_ROOT/package.json" diff --git a/scripts/package-checksum-generator.ts b/scripts/package-checksum-generator.ts index 2743f1c..fd88dcb 100644 --- a/scripts/package-checksum-generator.ts +++ b/scripts/package-checksum-generator.ts @@ -2,7 +2,9 @@ // SPDX-License-Identifier: MIT-0 import { createHash } from 'crypto'; -import { readFileSync, writeFileSync } from 'fs'; +import { existsSync, readFileSync, writeFileSync } from 'fs'; + +const VERIFICATION_FILE = './package-verification.json'; const generateChecksum = (filePath: string) => { const checksum = createHash('sha256'); @@ -10,9 +12,15 @@ const generateChecksum = (filePath: string) => { const hexCheckSum = checksum.digest('hex'); /* eslint-disable no-console */ console.log(hexCheckSum); - const checkSumMessage = { 'package-lock.json': hexCheckSum }; - writeFileSync('./package-verification.json', JSON.stringify(checkSumMessage)); + let checkSumState: Record = {}; + if (existsSync(VERIFICATION_FILE)) { + checkSumState = JSON.parse(readFileSync(VERIFICATION_FILE, { encoding: 'utf8' })) as Record; + } + + checkSumState['package-lock.json'] = hexCheckSum; + + writeFileSync(VERIFICATION_FILE, JSON.stringify(checkSumState, null, 2)); }; generateChecksum('./package-lock.json'); diff --git a/scripts/package-checksum-validator.ts b/scripts/package-checksum-validator.ts index 57630f9..2a50466 100644 --- a/scripts/package-checksum-validator.ts +++ b/scripts/package-checksum-validator.ts @@ -5,7 +5,8 @@ import { createHash } from 'crypto'; import { readFileSync } from 'fs'; -import * as expectedHashes from '../package-verification.json'; + +const expectedHashes = JSON.parse(readFileSync('./package-verification.json', { encoding: 'utf-8' })); const validateChecksum = (filePath: string, expectedHash: string) => { const checksum = createHash('sha256'); @@ -19,4 +20,4 @@ const validateChecksum = (filePath: string, expectedHash: string) => { } return true; }; -validateChecksum('./package-lock.json', expectedHashes['package-lock.json']); \ No newline at end of file +validateChecksum('./package-lock.json', expectedHashes['package-lock.json']); diff --git a/src/codebuild/post-deploy-fixes.py b/src/codebuild/post-deploy-fixes.py index 302a7ba..6b1e279 100755 --- a/src/codebuild/post-deploy-fixes.py +++ b/src/codebuild/post-deploy-fixes.py @@ -6,7 +6,7 @@ """ This is the python code triggered in the cdk pipeline post deployment. The script can be modified to execute post-deploy fixes which cannot be done through CDK but have to be done in SDK, e.g: fix log group retention days -This env var is defined in the `lib/pipeline-stack.ts` +This env var is defined in the `lib/cdk-pipeline/core/PostDeployBuildStep.ts` """ import boto3 diff --git a/src/codebuild/post-deploy-test.py b/src/codebuild/post-deploy-test.py index d6991b4..89ee394 100644 --- a/src/codebuild/post-deploy-test.py +++ b/src/codebuild/post-deploy-test.py @@ -5,10 +5,12 @@ """ This is the python code triggered in the cdk pipeline post deployment. -The script can be modified to execute post-deploy tests which would be, e.g: Load Testing after all the resources have been deployed -This env var is defined in the `lib/pipeline-stack.ts` +For describing all the log groups in the target account and add log log_groups definition. +The scripts assumes a role that is created in the `lib/test-role.ts` and the role name is passed as env var; +This env var is defined in the `lib/cdk-pipeline/core/PostDeployBuildStep.ts` """ import boto3 +from botocore.config import Config import logging import os @@ -28,7 +30,7 @@ def perform_tests(stage,region=None): region = os.environ["AWS_REGION"] LOGGER.info(f"Region is not defined, using the region from codebuild environment {region}") - ### Do some tests with the acquired session + ### Do some fixes with the acquired session print(stage) print(region) @@ -36,4 +38,4 @@ def perform_tests(stage,region=None): stage = os.environ.get("STAGE") region = os.environ.get("TARGET_REGION") - perform_tests(stage,region) \ No newline at end of file + perform_tests(stage,region) diff --git a/src/codebuild/pre-deploy-test.py b/src/codebuild/pre-deploy-test.py index 95cd969..a0e7ee3 100644 --- a/src/codebuild/pre-deploy-test.py +++ b/src/codebuild/pre-deploy-test.py @@ -4,9 +4,10 @@ """ """ -This is the python code triggered in the cdk pipeline post deployment. -The script can be modified to execute pre-deploy tests which would be, e.g: Integration/Unit Testing of your code -This env var is defined in the `lib/pipeline-stack.ts` +This is the python code triggered in the cdk pipeline pre deployment. +For describing all the log groups in the target account and add log log_groups definition. +The scripts assumes a role that is created in the `lib/test-role.ts` and the role name is passed as env var; +This env var is defined in the `lib/cdk-pipeline/core/PreDeployBuildStep.ts` """ import logging import os @@ -31,4 +32,4 @@ def perform_tests(stage,region=None): stage = os.environ.get("STAGE") region = os.environ.get("TARGET_REGION") - perform_tests(stage,region) \ No newline at end of file + perform_tests(stage,region) diff --git a/src/lambda-functions/test/test-lambda.py b/src/lambda-functions/test/test-lambda.py index 333716e..816ec44 100644 --- a/src/lambda-functions/test/test-lambda.py +++ b/src/lambda-functions/test/test-lambda.py @@ -2,6 +2,7 @@ Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 """ + import logging import pandas import OpenSSL diff --git a/test/PipelineStack.test.ts b/test/PipelineStack.test.ts index 3a66630..91e66f4 100644 --- a/test/PipelineStack.test.ts +++ b/test/PipelineStack.test.ts @@ -38,6 +38,7 @@ describe('pipeline-stack-test-codecommit', () => { isDockerEnabledForSynth: TestAppConfig.codeBuildEnvSettings.isPrivileged, buildImage: TestAppConfig.codeBuildEnvSettings.buildImage, branch: repository.repositoryBranch, + primaryOutputDirectory: TestAppConfig.codeBuildEnvSettings.synthOutputDirectory, pipelineVariables: { ...repository.pipelineEnvVars, PROXY_SECRET_ARN: TestAppConfig.proxy?.proxySecretArn ?? '', @@ -141,6 +142,7 @@ describe('pipeline-stack-test-codestar', () => { isDockerEnabledForSynth: TestAppConfig.codeBuildEnvSettings.isPrivileged, buildImage: TestAppConfig.codeBuildEnvSettings.buildImage, branch: repository.repositoryBranch, + primaryOutputDirectory: TestAppConfig.codeBuildEnvSettings.synthOutputDirectory, pipelineVariables: { ...repository.pipelineEnvVars, PROXY_SECRET_ARN: TestAppConfig.proxy?.proxySecretArn ?? '', diff --git a/test/TestConfig.ts b/test/TestConfig.ts index e93c77c..12639cb 100644 --- a/test/TestConfig.ts +++ b/test/TestConfig.ts @@ -8,6 +8,7 @@ import { CodeGuruSeverityThreshold } from '../lib/cdk-pipeline/core/constructs/C const codeBuildEnvSettings: ICodeBuildEnvSettings = { isPrivileged: true, buildImage: codebuild.LinuxBuildImage.STANDARD_7_0, + synthOutputDirectory: './cdk.out', }; export const TestAppConfig: IAppConfig = { diff --git a/utils/license-checker/Dockerfile b/utils/license-checker/Dockerfile deleted file mode 100644 index f592957..0000000 --- a/utils/license-checker/Dockerfile +++ /dev/null @@ -1,151 +0,0 @@ -# Copyright 2020-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Amazon Software License (the "License"). You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://aws.amazon.com/asl/ -# -# or in the "license" file accompanying this file. -# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied. -# See the License for the specific language governing permissions and limitations under the License. -FROM public.ecr.aws/ubuntu/ubuntu@sha256:23e9f11fb3faa415ccc1f547eaabffe82ad508e51e9cea437f6c7e0af7b08585 AS core - -ARG DEBIAN_FRONTEND="noninteractive" - -# Install git, SSH, and other utilities -RUN set -ex \ - && echo 'Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/99use-gzip-compression \ - && apt-get update \ - && apt install -y -qq apt-transport-https gnupg ca-certificates \ - && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \ - && apt-get install software-properties-common -y -qq --no-install-recommends \ - && apt-add-repository -y ppa:git-core/ppa \ - && apt-get update \ - && apt-get install git=1:2.* -y -qq --no-install-recommends \ - && git version \ - && apt-get install -y -qq --no-install-recommends openssh-client \ - && mkdir ~/.ssh \ - && mkdir -p /codebuild/image/config \ - && touch ~/.ssh/known_hosts \ - && ssh-keyscan -t rsa,dsa,ed25519,ecdsa -H github.com >> ~/.ssh/known_hosts \ - && ssh-keyscan -t rsa,dsa,ed25519,ecdsa -H bitbucket.org >> ~/.ssh/known_hosts \ - && chmod 600 ~/.ssh/known_hosts \ - && apt-get install -y -qq --no-install-recommends \ - apt-utils asciidoc autoconf automake build-essential bzip2 \ - bzr curl dirmngr docbook-xml docbook-xsl dpkg-dev \ - e2fsprogs expect fakeroot file g++ gcc gettext gettext-base \ - groff gzip iptables jq less libapr1 libaprutil1 \ - libargon2-0-dev libbz2-dev libc6-dev libcurl4-openssl-dev \ - libdb-dev libdbd-sqlite3-perl libdbi-perl libdpkg-perl \ - libedit-dev liberror-perl libevent-dev libffi-dev libgeoip-dev \ - libglib2.0-dev libhttp-date-perl libio-pty-perl libjpeg-dev \ - libkrb5-dev liblzma-dev libmagickcore-dev libmagickwand-dev \ - libmysqlclient-dev libncurses5-dev libncursesw5-dev libonig-dev \ - libpq-dev libreadline-dev libserf-1-1 libsodium-dev libsqlite3-dev libssl-dev \ - libsvn1 libsvn-perl libtcl8.6 libtidy-dev libtimedate-perl \ - libtool libwebp-dev libxml2-dev libxml2-utils libxslt1-dev \ - libyaml-dev libyaml-perl llvm locales make mlocate \ - netbase openssl patch pkg-config procps python3-configobj \ - python3-openssl rsync sgml-base sgml-data \ - tar tcl tcl8.6 tk tk-dev unzip wget xfsprogs xml-core xmlto xsltproc \ - libzip-dev vim xvfb xz-utils zip zlib1g-dev \ - && rm -rf /var/lib/apt/lists/* - -ENV LC_CTYPE="C.UTF-8" - -RUN useradd codebuild-user - -#=======================End of layer: core ================= - - -FROM core AS tools - -# Install stunnel -RUN set -ex \ - && STUNNEL_VERSION=5.69 \ - && STUNNEL_TAR=stunnel-$STUNNEL_VERSION.tar.gz \ - && STUNNEL_SHA256="1ff7d9f30884c75b98c8a0a4e1534fa79adcada2322635e6787337b4e38fdb81" \ - && curl -o $STUNNEL_TAR https://www.stunnel.org/archive/5.x/$STUNNEL_TAR && echo "$STUNNEL_SHA256 $STUNNEL_TAR" | sha256sum --check && tar xfz $STUNNEL_TAR \ - && cd stunnel-$STUNNEL_VERSION \ - && ./configure \ - && make -j4 \ - && make install \ - && openssl genrsa -out key.pem 2048 \ - && openssl req -new -x509 -key key.pem -out cert.pem -days 1095 -subj "/C=US/ST=Washington/L=Seattle/O=Amazon/OU=Codebuild/CN=codebuild.amazon.com" \ - && cat key.pem cert.pem >> /usr/local/etc/stunnel/stunnel.pem \ - && cd .. && rm -rf stunnel-${STUNNEL_VERSION}* - -# AWS Tools -# https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html -RUN curl -sS -o /usr/local/bin/aws-iam-authenticator https://s3.us-west-2.amazonaws.com/amazon-eks/1.25.6/2023-01-30/bin/linux/amd64/aws-iam-authenticator \ - && curl -sS -o /usr/local/bin/kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.25.6/2023-01-30/bin/linux/amd64/kubectl \ - && curl -sS -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest \ - && curl -sS -L https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_Linux_amd64.tar.gz | tar xz -C /usr/local/bin \ - && chmod +x /usr/local/bin/kubectl /usr/local/bin/aws-iam-authenticator /usr/local/bin/ecs-cli /usr/local/bin/eksctl - -# Install env tools for runtimes - -#nodejs -ARG SRC_DIR="/usr/src" -ARG N_SRC_DIR="$SRC_DIR/n" -RUN git clone https://github.com/tj/n $N_SRC_DIR \ - && cd $N_SRC_DIR && make install - -#python -RUN curl https://pyenv.run | bash -ENV PATH="/root/.pyenv/shims:/root/.pyenv/bin:$PATH" - -#=======================End of layer: tools ================= -FROM tools AS runtimes - - - -#**************** NODEJS **************************************************** - -ENV NODE_18_VERSION="18.16.1" - -RUN n $NODE_18_VERSION && npm install --save-dev -g -f grunt && npm install --save-dev -g -f grunt-cli && npm install --save-dev -g -f webpack \ - && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ - && apt-get update && apt-get install -y -qq --no-install-recommends yarn \ - && yarn --version \ - && cd / && rm -rf $N_SRC_DIR && rm -rf /tmp/* - -#**************** END NODEJS **************************************************** - -#**************** PYTHON ***************************************************** -ENV PYTHON_311_VERSION="3.11.4" - -ARG PYTHON_PIP_VERSION=23.1.1 -ENV PYYAML_VERSION=5.4.1 - -COPY tools/runtime_configs/python/$PYTHON_311_VERSION /root/.pyenv/plugins/python-build/share/python-build/$PYTHON_311_VERSION -RUN env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install $PYTHON_311_VERSION && rm -rf /tmp/* -RUN pyenv global $PYTHON_311_VERSION -RUN set -ex \ - && pip3 install --no-cache-dir --upgrade --force-reinstall "pip==$PYTHON_PIP_VERSION" \ - && pip3 install wheel \ - && pip3 install --no-build-isolation "Cython<3" "PyYAML==$PYYAML_VERSION" \ - && pip3 install --no-cache-dir --upgrade 'setuptools==67.7.2' aws-sam-cli boto3 pipenv virtualenv \ - && pip3 uninstall cython --yes - -#**************** END PYTHON ***************************************************** - -#=======================End of layer: runtimes ================= - -FROM runtimes AS runtimes_n_corretto - -# Cleanup -RUN rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* \ - && apt-get clean - - -FROM runtimes_n_corretto AS std_v7 - -# Activate runtime versions specific to image version. -RUN n $NODE_18_VERSION -RUN pyenv global $PYTHON_311_VERSION - -ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh"] - -#=======================END of STD:7.0 ================= diff --git a/utils/license-checker/tools/runtime_configs/python/3.11.4 b/utils/license-checker/tools/runtime_configs/python/3.11.4 deleted file mode 100644 index 6cb3ca0..0000000 --- a/utils/license-checker/tools/runtime_configs/python/3.11.4 +++ /dev/null @@ -1,21 +0,0 @@ -export PYTHON_CONFIGURE_OPTS="\ - --enable-shared - --enable-loadable-sqlite-extensions" - -# Don't change below this line. -# https://github.com/pyenv/pyenv/blob/master/plugins/python-build/share/python-build/3.11.2 -# https://github.com/pyenv/pyenv/blob/master/plugins/python-build/share/python-build/3.11.4 - -#require_gcc -prefer_openssl11 -export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 -export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 -install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl -install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline -if has_tar_xz_support; then - install_package "Python-3.11.2" "https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tar.xz#29e4b8f5f1658542a8c13e2dd277358c9c48f2b2f7318652ef1675e402b9d2af" standard verify_py311 copy_python_gdb ensurepip - install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz#2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6" standard verify_py311 copy_python_gdb ensurepip -else - install_package "Python-3.11.2" "https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tgz#2411c74bda5bbcfcddaf4531f66d1adc73f247f529aee981b029513aefdbf849" standard verify_py311 copy_python_gdb ensurepip - install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz#85c37a265e5c9dd9f75b35f954e31fbfc10383162417285e30ad25cc073a0d63" standard verify_py311 copy_python_gdb ensurepip -fi \ No newline at end of file