diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..402505f
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+insert_final_newline = true
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..6313b56
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml
index 7b35f35..d8b9147 100644
--- a/.github/workflows/doc.yml
+++ b/.github/workflows/doc.yml
@@ -1,25 +1,42 @@
name: Typedoc build and deploy doc to GH pages
on:
- push:
- branches: ["main"]
+ push:
+ branches: ["main"]
- workflow_dispatch:
+ workflow_dispatch:
permissions:
- contents: write
+ contents: write
jobs:
- build-and-deploy:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Get yarn cache directory path
+ id: yarn-cache-dir-path
+ run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
+ - uses: actions/cache@v4
+ id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
+ with:
+ path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
+ key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-yarn-
- - name: Install and Build
- run: |
- npm ci
- npm run doc
+ - uses: actions/checkout@v4
+ - name: Enable Corepack
+ run: corepack enable
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: "yarn"
- - name: Deploy
- uses: JamesIves/github-pages-deploy-action@v4
- with:
- folder: dist/docs
+ - name: Install and Build
+ run: |
+ yarn install --immutable
+ yarn run doc
+
+ - name: Deploy
+ uses: JamesIves/github-pages-deploy-action@v4
+ with:
+ folder: dist/docs
diff --git a/.github/workflows/shellcheck.yml b/.github/workflows/shellcheck.yml
index d0b5a17..f13b419 100644
--- a/.github/workflows/shellcheck.yml
+++ b/.github/workflows/shellcheck.yml
@@ -13,4 +13,4 @@ jobs:
- name: Install shellcheck
run: sudo apt-get install shellcheck
- name: Run shellcheck
- run: shellcheck assets/*.sh
+ run: for file in $(find ./source-repo -type f -iname "*.sh"); do shellcheck $file; done;
diff --git a/.github/workflows/test-cdk.yml b/.github/workflows/test-cdk.yml
index 1e41c1d..35327de 100644
--- a/.github/workflows/test-cdk.yml
+++ b/.github/workflows/test-cdk.yml
@@ -13,13 +13,26 @@ jobs:
node-version: [22.x]
steps:
- - name: Check out repository code
- uses: actions/checkout@v3
+ - name: Get yarn cache directory path
+ id: yarn-cache-dir-path
+ run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
+ - uses: actions/cache@v4
+ id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
+ with:
+ path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
+ key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-yarn-
+
+ - uses: actions/checkout@v4
+ - name: Enable Corepack
+ run: corepack enable
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- - run: npm ci
- - run: npm run check
- - run: npm run build --if-present
- - run: npm test
+ cache: "yarn"
+ - run: yarn install --immutable
+ - run: yarn run check
+ - run: yarn run build
+ - run: yarn test
diff --git a/.gitignore b/.gitignore
index 0c7cc51..a566ebf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,15 @@
node_modules
dist
+# yarn asset
+yarn-install.log
+.yarn/*
+!.yarn/releases/
+!.yarn/plugins/
+!.yarn/versions/
+!.yarn/sdks/
+.pnp.*
+
# CDK asset staging directory
.cdk.staging
cdk.out
@@ -16,3 +25,6 @@ cdk.context.json
# Ignore Mac DS_Store files
**/.DS_Store
+
+assets
+source-zip
diff --git a/.yarn/sdks/eslint/package.json b/.yarn/sdks/eslint/package.json
new file mode 100644
index 0000000..f8cd8f7
--- /dev/null
+++ b/.yarn/sdks/eslint/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "eslint",
+ "version": "9.20.1-sdk",
+ "main": "./lib/api.js",
+ "type": "commonjs",
+ "bin": {
+ "eslint": "./bin/eslint.js"
+ },
+ "exports": {
+ ".": {
+ "types": "./lib/types/index.d.ts",
+ "default": "./lib/api.js"
+ },
+ "./package.json": "./package.json",
+ "./use-at-your-own-risk": {
+ "types": "./lib/types/use-at-your-own-risk.d.ts",
+ "default": "./lib/unsupported-api.js"
+ },
+ "./rules": {
+ "types": "./lib/types/rules/index.d.ts"
+ },
+ "./universal": {
+ "types": "./lib/types/universal.d.ts",
+ "default": "./lib/universal.js"
+ }
+ }
+}
diff --git a/.yarnrc.yml b/.yarnrc.yml
new file mode 100644
index 0000000..3186f3f
--- /dev/null
+++ b/.yarnrc.yml
@@ -0,0 +1 @@
+nodeLinker: node-modules
diff --git a/README.md b/README.md
index 0a268b0..657fbfd 100644
--- a/README.md
+++ b/README.md
@@ -1,122 +1,401 @@
# aws4embeddedlinux-ci
-This [cdk](https://github.com/aws/aws-cdk) IaC library helps you to deploy AWS cloud infrastructure to allow embedded Linux builds for your project.
+The `aws4embeddedlinux-ci` library helps you deploy an AWS cloud infrastructure supporting the Embedded Linux builds for your project using [AWS CDK](https://github.com/aws/aws-cdk).
+
+## Table of Contents
+
+1. [Architecture](#architecture)
+1. [API documentation](#api-documentation)
+1. [Project Build with AWS CodePipeline](#project-build-with-aws-codepipeline)
+1. [Project Build with AWS CodeBuild as Action Runner](#project-build-with-aws-codebuild-as-action-runner)
+1. [Setup](#setup)
+1. [Development Setup](#development-setup)
+1. [Known issues](#known-issues)
+1. [Security](#security)
+1. [Contributing](#contributing)
+1. [License](#license)
## Architecture
-
+
+This is the overall architecture pattern used to deploy the build pipeline:
+
+
+
+[Bask to the top](#aws4embeddedlinux-ci)
## API documentation
-[API documentation](https://aws4embeddedlinux.github.io/aws4embeddedlinux-ci/) generated by `npm run doc`
-# Setting Up
-In order to use this library, you must set up the [CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html), including
-installing the CDK tool and bootstrapping the account you wish to deploy to. Additionally, you must have [Node](https://nodejs.org/en/) installed.
+The [API documentation](https://aws4embeddedlinux.github.io/aws4embeddedlinux-ci/) is generated automatically using [Typedoc](https://typedoc.org/).
+
+[Bask to the top](#aws4embeddedlinux-ci)
+
+## Project Build with AWS CodePipeline
+
+Several pipelines are provided in this library, each one demonstrating a different aspect of how to build a Yocto image with AWS.
+
+Once deployed, ou can review the pipeline execution from the `Developer Tools > Pipeline - CodePipeline > Pipelines` page in the AWS Console.
+
+From the pipeline page, you can find the source repository (S3), the CodeBuild Project (with the build logs), and the S3 bucket that the image is uploaded to, at the end.
+
+Each pipelines will refresh/re-run automatically every week using AWS EventBridge in order to grab the latest updates.
+
+### __Poky__
+
+The pipeline name will end with **`poky`**.
+
+This example will build the `core-image-minimal` image from Poky using the repo tool to manage layers. CVE checking is also enabled in the buildspec file.
+
+**_Expected build times_**:
+
+- First build: **32 minutes**
+- Rebuild (without any change, just use sstate cache): **8 minutes**
+
+### __Poky EC2 AMI__
+
+The pipeline name will end with **`poky-ami`**.
+
+Yocto can be used to create an EC2 AMI. This example builds an AMI based on Poky and meta-aws and exports it to your AMI registry using the [VM Import/Export Service](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html).
+
+**_Expected build times_**:
+
+- First build: **52 minutes**
+- Rebuild (without any change, just use sstate cache): **17 minutes**
+
+### __Kas__
+
+The pipeline name will end with **`kas`**.
+
+The Kas example shows how to use a [Kas Config](https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci/blob/main/source-repo/kas/kas.yml) to manage layers.
+
+This tool can help programatically manage layers and config with tighter Yocto integration than Git Submodules or the Repo tool.
+
+**_Expected build times_**:
+
+- First build: **36 minutes**
+- Rebuild (without any change, just use sstate cache): **11 minutes**
+
+### __QEmu__
+
+The pipeline name will end with **`qemu`**.
+
+This example builds a Qemu based image using [meta-aws-demos](https://github.com/aws4embeddedlinux/meta-aws-demos).
+
+The Qemu image can be run in the CodeBuild environment. Using SLIRP networking, [OEQA testing](https://docs.yoctoproject.org/singleindex.html#performing-automated-runtime-testing) such as ptest can be run in the pipeline.
+
+**_Expected build times_**:
+
+- First build: **45 minutes**
+- Rebuild (without any change, just use sstate cache): **14 minutes**
+
+### __NXP / IMX__
+
+The pipeline name will end with **`nxp`**.
+
+This example will build an image for the [i.MX 6ULL EVK](https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-6ull-and-6ulz-applications-processor:MCIMX6ULL-EVK) board.
+
+**NXP requires users to accept and comply with a EULA in order to build** and, for this reason, **the buildspec will require modification before the build succeeds**.
+
+See the [IMX Yocto Users Guide](https://www.nxp.com/docs/en/user-guide/IMX_YOCTO_PROJECT_USERS_GUIDE.pdf) for more detail.
+
+**_Expected build times_**:
+
+- First build: **xx minutes**
+- Rebuild (without any change, just use sstate cache): **xx minutes**
+
+### __Renesas__
+
+This example is based on the [Yocto / Renesas R-Car work](https://elinux.org/R-Car/Boards/Yocto-Gen3/v5.9.0) to build an image for Renesas R-Car-H3 Starter Kit Premier board (unofficial name - H3ULCB) including the proprietary graphics and multimedia drivers from Renesas.
+
+You will need to download the Multimedia and Graphics library and related Linux drivers from the following link (registration necessary):
+
+- https://www.renesas.com/us/en/application/automotive/r-car-h3-m3-h2-m2-e2-documents-software
+
+**Download the following files:**
+
+- R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20220121
+- R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20220121
+
+Graphic drivers are required for Wayland. Multimedia drivers are optional.
+
+**Steps to build the image:**
+
+- Create a folder named `proprietary` in the root of the source repo
+- Copy the downloaded files into the `proprietary` folder
+- Uncomment the `#TODO` line in the `build.sh` file in the source repo
+- Deploy the build pipeline
+
+A build should automatically start. Once it succeeds you will get an image containing the proprietary graphics and multimedia drivers.
+
+**_Expected build times_**:
+
+- First build: **30 minutes**
+- Rebuild (without any change, just use sstate cache): **9 minutes**
+
+[Bask to the top](#aws4embeddedlinux-ci)
+
+
+## Project Build with AWS CodeBuild as Action Runner
+
+
+This will create an AWS CodeBuild project ready to build Embedded Linux which can be used to connect to an external source, e.g. [GitHub Actions](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html). This is not using any AWS CodePipeline as in the the Pipeline examples section.
+
+You can use the following [example](https://github.com/aws4embeddedlinux/meta-aws-demos/blob/master/.github/workflows/build-gg.yml) for your GitHub Action.
+
+We recommend you to clone the created AWS CodeBuild project and then proceed with the GitHub Action configuration.
+However, this will result in the use of the same EFS file system across projects.
+
+Using the AWS CodeBuild project requires a source to be configured manually in the AWS Console at `Developer Tools > Build - CodeBuild > Projects`.
+
+To configure the AWS CodeBuild source connection to a GitHub repository, you will need to:
+
+- Select the AWS CodeBuild project (`aws4el-ci-codebuild-project`)
+- Select the `Project Details` tab
+- Scroll to the `Source` section and click on **Edit**.
+- Select **`GitHub`** as a **Source provider**. Configure the access to your repository
+- Scroll to the **Primary source webhook events** section, enable **Rebuild every time a code change is pushed to this repository**
+- Expand the **Webhook event filter groups** section and click on **Add filter group** if no group is present, then select **WORKFLOW_JOB_QUEUED** as **Filter group 1**
+
+
+Modify your repository GitHub action by replacing the following line:
+```
+runs-on: ${{ vars.CODEBUILD_RUNNER_NAME }}-${{ github.run_id }}-${{ github.run_attempt }}
+```
+
+with:
+
+```
+runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }}
+```
+
+`` should be replaced by your AWS CodeBuild project name (`aws4el-ci-codebuild-project`).
+There might be more than one occuerence to replace in the file.
+
+Refer to the following [example](https://github.com/aws4embeddedlinux/meta-aws-demos/blob/master/.github/workflows/build-gg.yml) for more details.
+
+[Bask to the top](#aws4embeddedlinux-ci)
+
+## Setup
+
+In order to use this library, you must first set up an [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) project, including
+installing the CDK tool and bootstrapping the account you wish to deploy to.
+
+Additionally, you must have [NodeJS](https://nodejs.org/en/) installed.
> [!NOTE]
-> This library is tested against Node Versions 22. If these version is not available for your system, we recommend
-> using [NVM](https://github.com/nvm-sh/nvm) to install a compatible version
+>
+> This library is tested against Node Versions 22. If these version is not available for your system, we recommend using [NVM](https://github.com/nvm-sh/nvm) to install a compatible version.
+>
-## Quickstart
-Use the [examples](https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples) in our examples repo.
+You can also use the [sample project code](https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples) provided to get started and deploy the stacks.
+[Bask to the top](#aws4embeddedlinux-ci)
-## Setting Up A New Project
+### Setting Up A New Project
-1. Create a CDK project. More details can be found in the [CDK Getting Started Documentation](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html).
- ```
- mkdir my-project
- cd my-project
- cdk init app --language typescript
- ```
-2. Add the cdk library with `npm install aws4embeddedlinux/aws4embeddedlinux-ci`.
-3. Create your application using the library. Refer to the [API Documentation](https://aws4embeddedlinux.github.io/aws4embeddedlinux-ci)
- and the [Examples](github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples) for more details.
-4. Deploy your application using `cdk deploy`.
-5. After the application is deployed, the 'Build Image' Pipeline needs to be run. This will create an Ubuntu based container for
- building Yocto. This container is used by the other pipelines. If the other pipelines are run before this container is created
- and pushed to [ECR](https://aws.amazon.com/ecr/), they will fail. This Build Image Pipeline will run weekly by default to keep
- this container patched.
-6. Now the application pipeline can be run. This will push the contents of the Yocto deploy directory into S3.
+In order to create a new project, you will need to initialize a new CDK project.
-## Viewing Changes
+More details can be found in the [CDK Getting Started Documentation](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html).
-The `cdk diff` command can be used to preview changes before deployment. This will allow the user to review what is being created.
+The following commands will create a new CDK project named `my-project`:
-## Development Setup
-You can use [`npm link`](https://docs.npmjs.com/cli/v10/commands/npm-link) to develop with a local copy of this repo.
+```bash
+mkdir my-project
+cd my-project
+cdk init app --language typescript
+```
-### In this library repo:
+Then you will need to install the CDK library including the `aws4embeddedlinux-ci` library either using `npm`:
```bash
-npm install
+npm install aws4embeddedlinux/aws4embeddedlinux-ci
```
-### In your-project folder:
+of `yarn':
```bash
-npm install
-npm link ../aws4embeddedlinux-ci
+yarn add github:aws4embeddedlinux/aws4embeddedlinux-ci
+yarn install
```
-This will link through the system `node_modules` install. When using a system node install on Linux, this can require sudo access. To avoid this, use
-a [node version manager](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm#using-a-node-version-manager-to-install-nodejs-and-npm)
-or [set a node prefix](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally).
+> If you are not familliar with Yarn, please refer to the [documentation](https://yarnpkg.com/getting-started).
-## Known issues
-- Windows is currently not supported.
-- When using AWS Cloud9 a micro instance type will run out of memory.
-- Deletion of stacks while a CodePipeline is running can lead to unexpected failures.
+Once added, you can start creatin your application using the library.
-## Security
+For example, you can start by importing classes using:
-See [SECURITY](SECURITY.md) for more information about reporting issues with this project.
+```ts
+import {
+ EmbeddedLinuxCodePipelineBaseImageStack,
+ EmbeddedLinuxCodePipelineStack,
+ EmbeddedLinuxCodeBuildProjectStack,
+ PipelineResourcesStack,
+ ProjectType,
+} from "aws4embeddedlinux-cdk-lib";
+```
-### Git Credentials and Build Time Secrets
-[AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) is the preferred method of adding secrets
-to your pipeline. This service provides a structured means of access and avoids the pitfalls of putting secrets in environment variables,
-source repos, etc.
+Then deploy the base resources and base image pipeline stacks:
-1. Create a _Secret_ in Secrets Manager and add your secret value.
-1. Grant access permissions to the CodeBuild pipeline project.
-11. Create a [Policy Statement](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.PolicyStatement.html) which allows `secretsmanager:GetSecretValue` for your secret.
-11. Add this policy statement to the `buildPolicyAdditions` props for the `EmbeddedLinuxPipelineStack`. e.g.
+```typescript
+const pipelineResourcesStack = new PipelineResourcesStack(app, `demo-resources`, {...});
+const baseImageStack = new EmbeddedLinuxCodePipelineBaseImageStack(app, `demo-pipeline-base-image`, {...});
+```
+And ultimately deploy the target pipeline:
```typescript
-import * as iam from "aws-cdk-lib/aws-iam";
-
-const pipeline = new EmbeddedLinuxPipelineStack(app, "MyPokyPipeline", {
- imageRepo: buildImageRepo.repository,
- imageTag: ImageKind.Ubuntu22_04,
- vpc: vpc.vpc,
- buildPolicyAdditions: [
- iam.PolicyStatement.fromJson({
- Effect: "Allow",
- Action: "secretsmanager:GetSecretValue",
- Resource:
- "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-secret-??????",
- }),
- ],
+const projectPipeline = new EmbeddedLinuxCodePipelineStack(app, "demo-project", {
+ projectType: ProjectType.Poky,
+ ecrRepository: ,
+ ecrRepositoryImageTag: ,
+ pipelineSourceBucket: ,
+ pipelineArtifactBucket: ,
+ pipelineOutputBucket: ,
+ vpc: ,
+ encryptionKey: ,
});
- ```
+```
+
+Refer to the [API Documentation](https://aws4embeddedlinux.github.io/aws4embeddedlinux-ci) and the [sample](github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples) for more details.
+
+Once you have completed the code of your application, you can deploy the CDK stack using:
+
+```bash
+cdk deploy
+```
-The secret can then be used in the CodeBuild Project by adding it to the BuildSpec. See
-the [CodeBuild Documentation](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) for more details.
+After the CDK application is successfully deployed, the 'Base Image' pipeline needs to complete successfully.
-```yaml
-env:
- secrets-manager:
- SECRET_VALUE: ""
+This will create an Ubuntu based container for building the Yocto images.
+
+> [!NOTE]
+>
+> This container is used by the other pipelines. If the other pipelines are run before this container is created and pushed to [ECR](https://aws.amazon.com/ecr/), they will fail.
+>
+> The 'Base Image' pipeline will run weekly by default to keep the container patched and up to date.
+>
+
+> [!NOTE]
+>
+> We recommend you to deploy first the 'Base Image' pipeline and once the pipeline completes successfully, then you can deploy the other pipelines in you application as described in the [sample](github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples).
+>
+
+Once your pipelines completes successfully, the Yocto deploy directory generated content will be pushed into a S3 bucket.
+
+[Bask to the top](#aws4embeddedlinux-ci)
+
+## Development Setup
+
+The repository is leveraging Yarn 2 and if you are not familliar with Yarn, please refer to the [documentation](https://yarnpkg.com/getting-started).
+
+If you are looking to develop new feature, you can use [`yarn link`](https://classic.yarnpkg.com/lang/en/docs/cli/link/k) to develop with a local copy of this repo.
+
+In this library repo, execute the following:
+
+```bash
+yarn install
+yarn run build
+yarn link
+```
+
+and in your project folder:
+
+```bash
+yarn install
+yarn link "aws4embeddedlinux-cdk-lib"
+yarn run build
```
+This will link through the system `node_modules` install.
+
+> _Note:_
+>
+> You should not install / reference the `aws4embeddedlinux/aws4embeddedlinux-ci` library in your `package.json` when using this approach.
+>
+
+
+> _Note:_
+>
+> After changing the code for the `aws4embeddedlinux/aws4embeddedlinux-ci` library, you will need to run `yarn run build` for changes to be available in your current project.
+>
+
+
+> _Note:_
+>
+> When using a system node install on Linux, this can require sudo access.
+> To avoid this, use a [node version manager](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm#using-a-node-version-manager-to-install-nodejs-and-npm) or [set a node prefix](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally).
+
+### Using Git Credentials and Build Time Secrets
+
+[AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) is the preferred method for adding and using secrets in your pipelines.
+
+The service provides a structured means of access and avoids the pitfalls of putting secrets in environment variables, source repos, etc.
+
+The following steps detaisl at a high level, how you can enable the use of AWS Secrets Manager in your pipelines:
+
+- Create a _Secret_ in Secrets Manager and add your secret value.
+- Grant access permissions to the CodeBuild pipeline project.
+- Create a [Policy Statement](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.PolicyStatement.html) which allows `secretsmanager:GetSecretValue` for your secret.
+- Add this policy statement to the `buildPolicyAdditions` props for the `EmbeddedLinuxPipelineStack`. e.g.
+
+ ```typescript
+ import * as iam from "aws-cdk-lib/aws-iam";
+ const projectPipeline = new EmbeddedLinuxCodePipelineStack(app, "MyPokyPipeline", {
+ projectType: ProjectType.Poky,
+ ecrRepository: ,
+ ecrRepositoryImageTag: ,
+ pipelineSourceBucket: ,
+ pipelineArtifactBucket: ,
+ pipelineOutputBucket: ,
+ vpc: ,
+ encryptionKey: ,
+ buildPolicyAdditions: [
+ iam.PolicyStatement.fromJson({
+ Effect: "Allow",
+ Action: "secretsmanager:GetSecretValue",
+ Resource:
+ "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-secret-??????",
+ }),
+ ],
+ });
+ ```
+
+- The secret can then be used in the CodeBuild Project by adding it to the BuildSpec.
+
+ ```yaml
+ env:
+ secrets-manager:
+ SECRET_VALUE: ""
+ ```
+See the [CodeBuild Documentation](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) for more details.
+
### CVE Checking With Yocto
-CVE checking is enabled in the reference implementations. Details on this can be found in
-the [yocto documentation](https://docs.yoctoproject.org/4.0.13/singleindex.html#checking-for-vulnerabilities).
+CVE checking is enabled in the reference implementations. Details on this can be found in the [Yocto documentation](https://docs.yoctoproject.org/4.0.13/singleindex.html#checking-for-vulnerabilities).
+
+[Bask to the top](#aws4embeddedlinux-ci)
+
+## Known issues
+
+- The use of this CDK library is currently not supported in Windows environments (you can still use WSL).
+- When using AWS Cloud9, a micro instance type will run out of memory.
+- Deletion of stacks while a CodePipeline is running can lead to unexpected behaviours.
+- The NXP-IMX pipeline will fail unless you adjust the build spec file and address the licence acceptance requirement.
+
+[Bask to the top](#aws4embeddedlinux-ci)
+
+## Security
+
+See [SECURITY](SECURITY.md) for more information about reporting issues with this project.
+
+[Bask to the top](#aws4embeddedlinux-ci)
## Contributing
See [CONTRIBUTING](CONTRIBUTING.md) for more information.
+[Bask to the top](#aws4embeddedlinux-ci)
+
## License
This library is licensed under the MIT-0 License. See the [LICENSE](LICENSE) file.
+
+[Bask to the top](#aws4embeddedlinux-ci)
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 61853b1..a9f6154 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -1,79 +1,89 @@
-import typescriptEslintEslintPlugin from "@typescript-eslint/eslint-plugin";
-import tsdoc from "eslint-plugin-tsdoc";
-import globals from "globals";
-import tsParser from "@typescript-eslint/parser";
-import path from "node:path";
-import { fileURLToPath } from "node:url";
-import js from "@eslint/js";
-import { FlatCompat } from "@eslint/eslintrc";
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
-
-import { includeIgnoreFile } from "@eslint/compat";
-const gitignorePath = path.resolve(__dirname, ".gitignore");
-
-const compat = new FlatCompat({
- baseDirectory: __dirname,
- recommendedConfig: js.configs.recommended,
- allConfig: js.configs.all
-});
-
-export default [...compat.extends(
- "eslint:recommended",
- "plugin:@typescript-eslint/recommended",
- "plugin:prettier/recommended",
-), {
- plugins: {
- "@typescript-eslint": typescriptEslintEslintPlugin,
- tsdoc,
- },
-
- languageOptions: {
- globals: {
- ...globals.browser,
- ...globals.node,
- ...globals.jest,
- },
-
- parser: tsParser,
- ecmaVersion: "latest",
- sourceType: "module",
-
- parserOptions: {
- sourceType: 'module',
- project: './tsconfig.json',
- },
- },
-
- rules: {
- "tsdoc/syntax": "warn",
-
- "max-len": ["error", {
- code: 150,
- ignoreUrls: true,
- ignoreStrings: true,
- ignoreTemplateLiterals: true,
- ignoreComments: true,
- ignoreRegExpLiterals: true,
- }],
-
- "prettier/prettier": ["error", {
- singleQuote: true,
- trailingComma: "es5",
- }],
- },
-
- ignores: [
- "jest.config.js",
- "package.json",
- "package-lock.json",
- "tsconfig.json",
- "typedoc.json",
- ],
-},
-includeIgnoreFile(gitignorePath),
-{
- // your overrides
-},
-];
+import typescriptEslintEslintPlugin from "@typescript-eslint/eslint-plugin";
+import tsdoc from "eslint-plugin-tsdoc";
+import globals from "globals";
+import tsParser from "@typescript-eslint/parser";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+import eslint from "@eslint/js";
+import tseslint from "typescript-eslint";
+import { FlatCompat } from "@eslint/eslintrc";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+import { includeIgnoreFile } from "@eslint/compat";
+const gitignorePath = path.resolve(__dirname, ".gitignore");
+
+const compat = new FlatCompat({
+ baseDirectory: __dirname,
+ recommendedConfig: eslint.configs.recommended,
+ allConfig: eslint.configs.all,
+});
+
+export default [
+ {
+ plugins: {
+ "@typescript-eslint": typescriptEslintEslintPlugin,
+ tsdoc,
+ },
+
+ languageOptions: {
+ globals: {
+ ...globals.node,
+ ...globals.jest,
+ },
+
+ parser: tsParser,
+ ecmaVersion: "latest",
+ sourceType: "module",
+
+ parserOptions: {
+ sourceType: "module",
+ project: "./tsconfig.json",
+ },
+ },
+
+ rules: {
+ "tsdoc/syntax": "warn",
+
+ "max-len": [
+ "error",
+ {
+ code: 150,
+ ignoreUrls: true,
+ ignoreStrings: true,
+ ignoreTemplateLiterals: true,
+ ignoreComments: true,
+ ignoreRegExpLiterals: true,
+ },
+ ],
+
+ "prettier/prettier": [
+ "error",
+ {
+ singleQuote: true,
+ trailingComma: "es5",
+ },
+ ],
+ },
+ ignores: [
+ "jest.config.js",
+ "package.json",
+ "package-lock.json",
+ "tsconfig.json",
+ "typedoc.json",
+ "/dist/**",
+ "/docs/**",
+ "/test/**",
+ "/tmp/**",
+ ],
+ ...eslint.configs.recommended,
+ },
+ includeIgnoreFile(gitignorePath),
+ ...compat.extends(
+ "eslint:recommended",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:prettier/recommended",
+ ),
+ ...tseslint.configs.recommended,
+];
diff --git a/images/architecture.svg b/images/architecture-v0.1.x.svg
similarity index 100%
rename from images/architecture.svg
rename to images/architecture-v0.1.x.svg
diff --git a/images/architecture-v0.2.x.svg b/images/architecture-v0.2.x.svg
new file mode 100644
index 0000000..30005bf
--- /dev/null
+++ b/images/architecture-v0.2.x.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/jest.config.js b/jest.config.js
index e993232..000683e 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,8 +1,16 @@
-export default {
- testEnvironment: "node",
- roots: ["/test"],
- testMatch: ["**/*.test.ts"],
- transform: {
- "^.+\\.tsx?$": "ts-jest",
- },
+/* eslint-env node */
+// module.exports = {
+// testEnvironment: "node",
+// roots: ["/test"],
+// testMatch: ["**/*.test.ts"],
+// transform: {
+// "^.+\\.tsx?$": "ts-jest",
+// },
+// };
+
+export const testEnvironment = "node";
+export const roots = ["/test"];
+export const testMatch = ["**/*.test.ts"];
+export const transform = {
+ "^.+\\.tsx?$": "ts-jest",
};
diff --git a/lib/build-image-data.ts b/lib/build-image-data.ts
deleted file mode 100644
index f81da3b..0000000
--- a/lib/build-image-data.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Construct } from 'constructs';
-import * as s3 from 'aws-cdk-lib/aws-s3';
-import { BucketDeployment, Source } from 'aws-cdk-lib/aws-s3-deployment';
-import * as iam from 'aws-cdk-lib/aws-iam';
-
-import * as path from 'path';
-import * as kms from 'aws-cdk-lib/aws-kms';
-import { RemovalPolicy } from 'aws-cdk-lib';
-
-/**
- * Select options for the {@link BuildImageDataStack}.
- */
-export interface BuildImageDataProps extends cdk.StackProps {
- /** The bucket name for image build sources. This must be globally unique. */
- readonly bucketName: string;
-}
-
-/**
- * Input (Source) data for our {@link BuildImagePipelineStack}.
- */
-export class BuildImageDataStack extends cdk.Stack {
- /** The bucket which will be consumed by the {@link BuildImagePipelineStack}. */
- public readonly bucket: s3.IBucket;
-
- constructor(scope: Construct, id: string, props: BuildImageDataProps) {
- super(scope, id, props);
-
- this.bucket = this.createDeploymentBucket(props.bucketName);
- }
-
- /**
- * Create a bucket and S3 deployment to this bucket.
- *
- * @param bucketName - The name of the bucket. Must be globally unique.
- * @param env - Environment passed to the stack.
- */
- private createDeploymentBucket(bucketName: string): s3.IBucket {
- const accessLoggingBucket = new s3.Bucket(this, 'LoggingBucket', {
- versioned: true,
- enforceSSL: true,
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
-
- const encryptionKey = new kms.Key(this, 'PipelineArtifactKey', {
- removalPolicy: RemovalPolicy.DESTROY,
- enableKeyRotation: true,
- });
-
- // Create a bucket, then allow a deployment Lambda to upload to it.
- const dataBucket = new s3.Bucket(this, 'BuildImageDataBucket', {
- bucketName,
- versioned: true,
- encryptionKey: encryptionKey,
- enforceSSL: true,
- serverAccessLogsBucket: accessLoggingBucket,
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
-
- const cwPolicy = new iam.PolicyDocument({
- statements: [
- new iam.PolicyStatement({
- actions: [
- 'logs:CreateLogGroup',
- 'logs:CreateLogStream',
- 'logs:PutLogEvents',
- ],
- resources: [
- `arn:aws:logs:${this.region}:${this.account}:log-group:/aws/lambda/BuildImageData-CustomCDKBucketDeployment*"`,
- ],
- }),
- ],
- });
-
- const dataBucketDeploymentRole = new iam.Role(
- this,
- 'BuildImageBucketRole',
- {
- assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
- inlinePolicies: { cwPolicy },
- }
- );
-
- dataBucketDeploymentRole.addToPolicy(
- new iam.PolicyStatement({
- actions: ['kms:Decrypt'],
- resources: [encryptionKey.keyArn],
- })
- );
-
- new BucketDeployment(this, 'BuildImageBucketDeployment', {
- // Note: Run `npm run zip-data` before deploying this stack!
- sources: [Source.asset(path.join(__dirname, '..', 'assets/build-image'))],
- destinationBucket: dataBucket,
- role: dataBucketDeploymentRole,
- extract: true,
- });
-
- return dataBucket;
- }
-}
diff --git a/lib/build-image-pipeline.ts b/lib/build-image-pipeline.ts
deleted file mode 100644
index fa349b0..0000000
--- a/lib/build-image-pipeline.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Construct } from 'constructs';
-import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
-import * as codepipeline_actions from 'aws-cdk-lib/aws-codepipeline-actions';
-import * as codebuild from 'aws-cdk-lib/aws-codebuild';
-import { IRepository } from 'aws-cdk-lib/aws-ecr';
-import * as s3 from 'aws-cdk-lib/aws-s3';
-import * as events from 'aws-cdk-lib/aws-events';
-import { CodePipeline } from 'aws-cdk-lib/aws-events-targets';
-import { LogGroup, RetentionDays } from 'aws-cdk-lib/aws-logs';
-import * as kms from 'aws-cdk-lib/aws-kms';
-import { RemovalPolicy } from 'aws-cdk-lib';
-
-/**
- * The type of Image to build on.
- */
-export enum ImageKind {
- /** Ubuntu 22.04 (LTS) */
- Ubuntu22_04 = 'ubuntu_22_04',
-}
-
-/**
- * Select options for the {@link BuildImagePipelineStack}.
- */
-export interface BuildImagePipelineProps extends cdk.StackProps {
- /** The Image type to create. */
- readonly imageKind: ImageKind;
- /** The data bucket from the {@link BuildImageDataStack} */
- readonly dataBucket: s3.IBucket;
- /** The ECR Repository to push to. */
- readonly repository: IRepository;
- /** Access logging bucket to use */
- readonly accessLoggingBucket?: s3.Bucket;
- /** Access logging prefix to use */
- readonly serverAccessLogsPrefix?: string;
- /** Artifact bucket to use */
- readonly artifactBucket?: s3.Bucket;
-}
-
-/**
- * The pipeline for building the CodeBuild Image used in other pipelines. This
- * will produce an image for an OS based on verified Yocto hosts.
- *
- * For configuration options see {@link BuildImagePipelineProps}.
- */
-export class BuildImagePipelineStack extends cdk.Stack {
- constructor(scope: Construct, id: string, props: BuildImagePipelineProps) {
- super(scope, id, props);
-
- // Create a source action.
- const sourceOutput = new codepipeline.Artifact('BuildImageSource');
- const sourceAction = new codepipeline_actions.S3SourceAction({
- actionName: 'Build-Image-Source',
- bucket: props.dataBucket,
- bucketKey: 'data.zip',
- output: sourceOutput,
- });
-
- // Create a build action.
- const buildImageProject = new codebuild.PipelineProject(
- this,
- 'BuildImageProject',
- {
- buildSpec: codebuild.BuildSpec.fromSourceFilename(
- `${props.imageKind}/buildspec.yml`
- ),
- environment: {
- computeType: codebuild.ComputeType.LARGE,
- buildImage: codebuild.LinuxBuildImage.STANDARD_7_0,
- privileged: true,
- },
- environmentVariables: {
- ECR_REPOSITORY_URI: {
- type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
- value: props.repository.repositoryUri,
- },
- AWS_ACCOUNT_ID: {
- type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
- value: cdk.Stack.of(this).account,
- },
- AWS_DEFAULT_REGION: {
- type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
- value: cdk.Stack.of(this).region,
- },
- IMAGE_TAG: {
- type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
- value: props.imageKind,
- },
- },
- logging: {
- cloudWatch: {
- logGroup: new LogGroup(this, 'BuildImageBuildLogs', {
- retention: RetentionDays.TEN_YEARS,
- }),
- },
- },
- }
- );
- props.repository.grantPullPush(buildImageProject);
-
- const buildAction = new codepipeline_actions.CodeBuildAction({
- actionName: 'Build',
- project: buildImageProject,
- input: sourceOutput,
- });
-
- let accessLoggingBucket: s3.IBucket;
-
- if (props.accessLoggingBucket) {
- accessLoggingBucket = props.accessLoggingBucket;
- } else {
- accessLoggingBucket = new s3.Bucket(this, 'ArtifactAccessLogging', {
- versioned: true,
- enforceSSL: true,
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
- }
-
- let artifactBucket: s3.IBucket;
-
- if (props.artifactBucket) {
- artifactBucket = props.artifactBucket;
- } else {
- const encryptionKey = new kms.Key(this, 'PipelineArtifactKey', {
- removalPolicy: RemovalPolicy.DESTROY,
- enableKeyRotation: true,
- });
- artifactBucket = new s3.Bucket(this, 'PipelineArtifacts', {
- versioned: true,
- enforceSSL: true,
- serverAccessLogsBucket: accessLoggingBucket,
- serverAccessLogsPrefix: props.serverAccessLogsPrefix,
- encryptionKey,
- encryption: s3.BucketEncryption.KMS,
- blockPublicAccess: new s3.BlockPublicAccess(
- s3.BlockPublicAccess.BLOCK_ALL
- ),
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
- }
-
- const pipeline = new codepipeline.Pipeline(this, 'BuildImagePipeline', {
- artifactBucket,
- pipelineName: `${props.imageKind}BuildImagePipeline`,
- pipelineType: codepipeline.PipelineType.V1,
- stages: [
- {
- stageName: 'Source',
- actions: [sourceAction],
- },
- {
- stageName: 'Build',
- actions: [buildAction],
- },
- ],
- restartExecutionOnUpdate: true,
- });
-
- // Run this pipeline weekly to update the image OS.
- const pipelineTarget = new CodePipeline(pipeline);
- new events.Rule(this, 'WeeklySchedule', {
- schedule: events.Schedule.cron({
- weekDay: 'Monday',
- minute: '0',
- hour: '6',
- }),
- targets: [pipelineTarget],
- });
- }
-}
diff --git a/lib/build-image-repo.ts b/lib/build-image-repo.ts
deleted file mode 100644
index 5b87e01..0000000
--- a/lib/build-image-repo.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Construct } from 'constructs';
-import * as ecr from 'aws-cdk-lib/aws-ecr';
-
-/**
- * The ECR Repository to store build host images.
- *
- * This is the output of the {@link BuildImagePipelineStack}
- */
-export class BuildImageRepoStack extends cdk.Stack {
- /** The respository to put the build host container in. */
- public readonly repository: ecr.IRepository;
-
- constructor(scope: Construct, id: string, props?: cdk.StackProps) {
- super(scope, id, props);
-
- this.repository = new ecr.Repository(this, 'BuildImageRepo', {
- removalPolicy: cdk.RemovalPolicy.DESTROY,
- emptyOnDelete: true,
- });
- }
-}
diff --git a/lib/codebuild-embedded-linux.ts b/lib/codebuild-embedded-linux.ts
new file mode 100644
index 0000000..eda45b1
--- /dev/null
+++ b/lib/codebuild-embedded-linux.ts
@@ -0,0 +1,205 @@
+import * as cdk from "aws-cdk-lib";
+import { Construct } from "constructs";
+import * as events from "aws-cdk-lib/aws-events";
+import * as targets from "aws-cdk-lib/aws-events-targets";
+import * as lambda from "aws-cdk-lib/aws-lambda";
+import * as iam from "aws-cdk-lib/aws-iam";
+import * as efs from "aws-cdk-lib/aws-efs";
+import * as codebuild from "aws-cdk-lib/aws-codebuild";
+import * as ecr from "aws-cdk-lib/aws-ecr";
+import * as ec2 from "aws-cdk-lib/aws-ec2";
+import * as logs from "aws-cdk-lib/aws-logs";
+import * as kms from "aws-cdk-lib/aws-kms";
+
+/**
+ * Properties to allow customizing the build.
+ */
+export interface EmbeddedLinuxCodeBuildProjectProps extends cdk.StackProps {
+ /** ECR Repository where the Build Host Image resides. */
+ readonly ecrRepository: ecr.IRepository;
+ /** Tag for the Build Host Image */
+ readonly ecrRepositoryImageTag: string;
+ /** VPC where the networking setup resides. */
+ readonly vpc: ec2.IVpc;
+ /** Additional policy statements to add to the build project. */
+ readonly buildPolicyAdditions?: iam.PolicyStatement[];
+ /** The encryption key use across*/
+ readonly encryptionKey: kms.Key;
+}
+
+/**
+ * The stack for creating a build pipeline.
+ *
+ * See {@link EmbeddedLinuxCodeBuildProjectProps} for configration options.
+ */
+export class EmbeddedLinuxCodeBuildProjectStack extends cdk.Stack {
+ constructor(
+ scope: Construct,
+ id: string,
+ props: EmbeddedLinuxCodeBuildProjectProps,
+ ) {
+ super(scope, id, props);
+
+ /** Set up networking access and EFS FileSystems. */
+
+ const projectSg = new ec2.SecurityGroup(
+ this,
+ "EmbeddedLinuxCodeBuildProjectSecurityGroup",
+ {
+ vpc: props.vpc,
+ description: "Security Group to allow attaching EFS",
+ },
+ );
+ projectSg.addIngressRule(
+ ec2.Peer.ipv4(props.vpc.vpcCidrBlock),
+ ec2.Port.tcp(2049),
+ "NFS Mount Port",
+ );
+
+ const efsFileSystem: efs.FileSystem = new efs.FileSystem(
+ this,
+ `EmbeddedLinuxCodeBuildProjectFilesystem`,
+ {
+ vpc: props.vpc,
+ allowAnonymousAccess: true,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ },
+ );
+ efsFileSystem.connections.allowFrom(projectSg, ec2.Port.tcp(2049));
+
+ /** Create our CodeBuild Project. */
+ const project = new codebuild.Project(
+ this,
+ "EmbeddedLinuxCodeBuildProject",
+ {
+ projectName: `${id}`,
+ buildSpec: codebuild.BuildSpec.fromObject({
+ version: "0.2",
+ phases: {
+ build: {
+ commands: ['echo "DUMMY BUILDSPEC - can not be empty"'],
+ },
+ },
+ artifacts: {
+ files: ["**/*"],
+ "base-directory": ".",
+ },
+ }),
+ environment: {
+ computeType: codebuild.ComputeType.X_LARGE,
+ buildImage: codebuild.LinuxBuildImage.fromEcrRepository(
+ props.ecrRepository,
+ props.ecrRepositoryImageTag,
+ ),
+ privileged: true,
+ },
+ timeout: cdk.Duration.hours(4),
+ vpc: props.vpc,
+ securityGroups: [projectSg],
+ fileSystemLocations: [
+ codebuild.FileSystemLocation.efs({
+ identifier: "nfs",
+ location: `${efsFileSystem.fileSystemId}.efs.${efsFileSystem.env.region}.amazonaws.com:/`,
+ mountPoint: "/nfs",
+ }),
+ ],
+ logging: {
+ cloudWatch: {
+ logGroup: new logs.LogGroup(
+ this,
+ "EmbeddedLinuxCodeBuildProjectLogs",
+ {
+ logGroupName: `${id}-EmbeddedLinuxCodeBuildProjectLogs`,
+ retention: logs.RetentionDays.ONE_YEAR,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ },
+ ),
+ },
+ },
+ encryptionKey: props.encryptionKey,
+ },
+ );
+
+ if (props.buildPolicyAdditions) {
+ props.buildPolicyAdditions.map((p) => project.addToRolePolicy(p));
+ }
+
+ project.addToRolePolicy(this.addProjectPolicies());
+
+ project.role?.addManagedPolicy(
+ iam.ManagedPolicy.fromAwsManagedPolicyName("AWSCodeBuildAdminAccess"),
+ );
+
+ /** Here we create the logic to check for presence of ECR image on the CodePipeline automatic triggering upon resource creation,
+ * and stop the execution if the image does not exist. */
+ const fnOnPipelineCreate = new lambda.Function(
+ this,
+ "EmbeddedLinuxCodeBuildProjectOSImageCheckOnStart",
+ {
+ runtime: lambda.Runtime.PYTHON_3_10,
+ handler: "index.handler",
+ code: lambda.Code.fromInline(`
+import boto3
+import json
+
+ecr_client = boto3.client('ecr')
+codepipeline_client = boto3.client('codepipeline')
+
+def handler(event, context):
+ print("Received event: " + json.dumps(event, indent=2))
+ response = ecr_client.describe_images(repositoryName='${props.ecrRepository.repositoryName}', filter={'tagStatus': 'TAGGED'})
+ for i in response['imageDetails']:
+ if '${props.ecrRepositoryImageTag}' in i['imageTags']:
+ break
+ else:
+ print('OS image not found. Stopping execution.')
+ response = codepipeline_client.stop_pipeline_execution(
+ pipelineName=event['detail']['pipeline'],
+ pipelineExecutionId=event['detail']['execution-id'],
+ abandon=True,
+ reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
+ `),
+ logRetention: logs.RetentionDays.ONE_YEAR,
+ },
+ );
+
+ const pipelineCreateRule = new events.Rule(
+ this,
+ "EmbeddedLinuxCodeBuildProjectOnPipelineStartRule",
+ {
+ eventPattern: {
+ detailType: ["CodePipeline Pipeline Execution State Change"],
+ source: ["aws.codepipeline"],
+ detail: {
+ state: ["STARTED"],
+ "execution-trigger": {
+ "trigger-type": ["CreatePipeline"],
+ },
+ },
+ },
+ },
+ );
+ pipelineCreateRule.addTarget(
+ new targets.LambdaFunction(fnOnPipelineCreate),
+ );
+ }
+
+ private addProjectPolicies(): iam.PolicyStatement {
+ return new iam.PolicyStatement({
+ actions: [
+ "ec2:DescribeSecurityGroups",
+ "codestar-connections:GetConnection",
+ "codestar-connections:GetConnectionToken",
+ "codeconnections:GetConnectionToken",
+ "codeconnections:GetConnection",
+ "codeconnections:ListConnection",
+ "codeconnections:UseConnection",
+ "codebuild:ListConnectedOAuthAccounts",
+ "codebuild:ListRepositories",
+ "codebuild:PersistOAuthToken",
+ "codebuild:ImportSourceCredentials",
+ ],
+ resources: ["*"],
+ });
+ }
+}
diff --git a/lib/codepipeline-embedded-linux-base-image.ts b/lib/codepipeline-embedded-linux-base-image.ts
new file mode 100644
index 0000000..0d218ca
--- /dev/null
+++ b/lib/codepipeline-embedded-linux-base-image.ts
@@ -0,0 +1,229 @@
+import * as path from "path";
+
+import * as cdk from "aws-cdk-lib";
+import { Construct } from "constructs";
+import { BucketDeployment, Source } from "aws-cdk-lib/aws-s3-deployment";
+import { Asset } from "aws-cdk-lib/aws-s3-assets";
+import * as codepipeline from "aws-cdk-lib/aws-codepipeline";
+import * as codepipeline_actions from "aws-cdk-lib/aws-codepipeline-actions";
+import * as codebuild from "aws-cdk-lib/aws-codebuild";
+import * as ecr from "aws-cdk-lib/aws-ecr";
+import * as s3 from "aws-cdk-lib/aws-s3";
+import * as events from "aws-cdk-lib/aws-events";
+import * as events_target from "aws-cdk-lib/aws-events-targets";
+import * as logs from "aws-cdk-lib/aws-logs";
+import * as iam from "aws-cdk-lib/aws-iam";
+import * as kms from "aws-cdk-lib/aws-kms";
+
+/**
+ * Select options for the {@link BuildImageCodePipelineStack}.
+ */
+export interface EmbeddedLinuxCodePipelineBaseImageProps
+ extends cdk.StackProps {
+ /** The pipeline source bucket */
+ readonly pipelineSourceBucket: s3.IBucket;
+ /** The pipeline source prefix */
+ pipelineSourcePrefix?: string;
+ /** Artifact bucket to use */
+ readonly pipelineArtifactBucket: s3.Bucket;
+ /** The ECR Repository to push to. */
+ readonly ecrRepository: ecr.IRepository;
+ /** The encryption key use across*/
+ readonly encryptionKey: kms.Key;
+}
+
+/**
+ * The pipeline for building the CodeBuild Image used in other pipelines. This
+ * will produce an image for an OS based on verified Yocto hosts.
+ *
+ * For configuration options see {@link BuildBaseImageCodePipelineProps}.
+ */
+export class EmbeddedLinuxCodePipelineBaseImageStack extends cdk.Stack {
+ /** The ECR Repository where the image is located. */
+ public readonly ecrRepository: ecr.IRepository;
+ /** The ECR Image Tag to find the base imaged. */
+ public readonly ecrRepositoryImageTag: string;
+
+ constructor(
+ scope: Construct,
+ id: string,
+ props: EmbeddedLinuxCodePipelineBaseImageProps,
+ ) {
+ super(scope, id, props);
+
+ this.ecrRepository = props.ecrRepository;
+ this.ecrRepositoryImageTag = `${id}`;
+
+ const projectType: string = "base-image";
+
+ if (!props.pipelineSourcePrefix) {
+ props.pipelineSourcePrefix = `${projectType}`;
+ }
+
+ // create the policy & role for the source bucket deployment
+ const pipelineSourceBucketDeploymentPolicy = new iam.PolicyDocument({
+ statements: [
+ new iam.PolicyStatement({
+ actions: [
+ "logs:CreateLogGroup",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ ],
+ resources: [
+ `arn:aws:logs:${cdk.Stack.of(this).region}:${cdk.Stack.of(this).account}:log-group:/aws/lambda/EmbeddedLinuxCodePipelineBaseImage-CustomCDKBucketDeployment*`,
+ ],
+ }),
+ ],
+ });
+ const pipelineSourceBucketDeploymentRole = new iam.Role(
+ this,
+ "CodePipelineBuildBaseImageBucketDeploymentRole",
+ {
+ assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
+ inlinePolicies: { pipelineSourceBucketDeploymentPolicy },
+ },
+ );
+
+ // archive and upload the source-repo folder into CDK owned bucket
+ const sourceRepoAsset: Asset = new Asset(
+ this,
+ "CodePipelineBuildBaseImageBucketDeploymentAsset",
+ {
+ path: path.join(__dirname, "..", "source-repo", projectType),
+ },
+ );
+
+ // deploy the uploaded archive to the target bucket
+ const bucketDeployment = new BucketDeployment(
+ this,
+ "CodePipelineBuildBaseImageBucketDeployment",
+ {
+ sources: [
+ Source.bucket(sourceRepoAsset.bucket, sourceRepoAsset.s3ObjectKey),
+ ],
+ destinationBucket: props.pipelineSourceBucket,
+ role: pipelineSourceBucketDeploymentRole,
+ extract: false,
+ destinationKeyPrefix: props.pipelineSourcePrefix,
+ },
+ );
+
+ /** Create our CodeCodePipeline Actions. */
+ const sourceActionOutputArtifact = new codepipeline.Artifact("Source");
+ const sourceAction = new codepipeline_actions.S3SourceAction({
+ actionName: "Source",
+ trigger: codepipeline_actions.S3Trigger.EVENTS,
+ output: sourceActionOutputArtifact,
+ bucket: props.pipelineSourceBucket,
+ bucketKey: `${props.pipelineSourcePrefix}/${sourceRepoAsset.s3ObjectKey}`,
+ });
+
+ /** Create our CodeCodePipeline Project. */
+ const project = new codebuild.PipelineProject(
+ this,
+ "CodePipelineBuildBaseImageProject",
+ {
+ projectName: `${this.ecrRepositoryImageTag}`,
+ buildSpec: codebuild.BuildSpec.fromSourceFilename(`buildspec.yml`),
+ environment: {
+ computeType: codebuild.ComputeType.MEDIUM,
+ buildImage: codebuild.LinuxBuildImage.STANDARD_7_0,
+ privileged: true,
+ },
+ environmentVariables: {
+ ECR_REPOSITORY_URI: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: props.ecrRepository.repositoryUri,
+ },
+ AWS_ACCOUNT_ID: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: cdk.Stack.of(this).account,
+ },
+ AWS_DEFAULT_REGION: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: cdk.Stack.of(this).region,
+ },
+ IMAGE_TAG: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: this.ecrRepositoryImageTag,
+ },
+ },
+ logging: {
+ cloudWatch: {
+ logGroup: new logs.LogGroup(
+ this,
+ "CodePipelineBuildBaseImageBuildLogs",
+ {
+ logGroupName: `${id}-CodePipelineBuildBaseImageBuildLogs`,
+ retention: logs.RetentionDays.ONE_YEAR,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ },
+ ),
+ },
+ },
+ encryptionKey: props.encryptionKey,
+ },
+ );
+ project.node.addDependency(bucketDeployment);
+ props.ecrRepository.grantPullPush(project);
+
+ const buildAction = new codepipeline_actions.CodeBuildAction({
+ actionName: "Build",
+ project: project,
+ input: sourceActionOutputArtifact,
+ });
+
+ const pipeline = new codepipeline.Pipeline(
+ this,
+ "CodePipelineBuildBaseImageCodePipeline",
+ {
+ artifactBucket: props.pipelineArtifactBucket,
+ pipelineName: `${this.ecrRepositoryImageTag}`,
+ pipelineType: codepipeline.PipelineType.V1,
+ stages: [
+ {
+ stageName: "Source",
+ actions: [sourceAction],
+ },
+ {
+ stageName: "Build",
+ actions: [buildAction],
+ },
+ ],
+ restartExecutionOnUpdate: true,
+ },
+ );
+ pipeline.node.addDependency(project);
+
+ // Run this pipeline weekly to update the image OS regularly.
+ const pipelineTarget = new events_target.CodePipeline(pipeline);
+ new events.Rule(this, "CodePipelineBuildBaseImageWeeklyRefreshSchedule", {
+ schedule: events.Schedule.cron({
+ weekDay: "Monday",
+ minute: "0",
+ hour: "6",
+ }),
+ targets: [pipelineTarget],
+ });
+
+ // Add stack output for the ECR repository and image tag
+ new cdk.CfnOutput(this, "ECRRepositoryName", {
+ value: this.ecrRepository.repositoryName,
+ description:
+ "The ECR Repository name where the base image will be pushed",
+ });
+ new cdk.CfnOutput(this, "ECRBaseImageTag", {
+ value: this.ecrRepositoryImageTag,
+ description: "The ECR Image Tag where the base image will be pushed",
+ });
+ new cdk.CfnOutput(this, "ECRBaseImageCheckCommand", {
+ value: `aws ecr list-images --repository-name "${this.ecrRepository.repositoryName}" --query "imageIds[?imageTag=='${this.ecrRepositoryImageTag}']"`,
+ description: "The AWS CLI command to check if the ECR Image was pushed",
+ });
+
+ new cdk.CfnOutput(this, "SourceURI", {
+ value: `s3://${props.pipelineSourceBucket.bucketName}/${props.pipelineSourcePrefix}/${sourceRepoAsset.s3ObjectKey}`,
+ description: "The source-repo bucket uri for this pipeline.",
+ });
+ }
+}
diff --git a/lib/codepipeline-embedded-linux.ts b/lib/codepipeline-embedded-linux.ts
new file mode 100644
index 0000000..b27fdcb
--- /dev/null
+++ b/lib/codepipeline-embedded-linux.ts
@@ -0,0 +1,541 @@
+import * as path from "path";
+import * as fs from "fs";
+
+import * as cdk from "aws-cdk-lib";
+import { Construct } from "constructs";
+import { BucketDeployment, Source } from "aws-cdk-lib/aws-s3-deployment";
+import { Asset } from "aws-cdk-lib/aws-s3-assets";
+import * as codepipeline from "aws-cdk-lib/aws-codepipeline";
+import * as codepipeline_actions from "aws-cdk-lib/aws-codepipeline-actions";
+import * as codebuild from "aws-cdk-lib/aws-codebuild";
+import * as events from "aws-cdk-lib/aws-events";
+import * as events_target from "aws-cdk-lib/aws-events-targets";
+import * as targets from "aws-cdk-lib/aws-events-targets";
+import * as lambda from "aws-cdk-lib/aws-lambda";
+import * as iam from "aws-cdk-lib/aws-iam";
+import * as efs from "aws-cdk-lib/aws-efs";
+import * as s3 from "aws-cdk-lib/aws-s3";
+import * as ecr from "aws-cdk-lib/aws-ecr";
+import * as ec2 from "aws-cdk-lib/aws-ec2";
+import * as logs from "aws-cdk-lib/aws-logs";
+import * as kms from "aws-cdk-lib/aws-kms";
+import { ProjectType } from ".";
+
+/**
+ * Properties to allow customizing the build.
+ */
+export interface EmbeddedLinuxCodePipelineProps extends cdk.StackProps {
+ /** The pipeline source bucket */
+ readonly pipelineSourceBucket: s3.IBucket;
+ /** The pipeline source prefix */
+ pipelineSourcePrefix?: string;
+ /** The pipeline artifact bucket to use */
+ readonly pipelineArtifactBucket: s3.Bucket;
+ /** The pipeline artifact bucket prefix to use */
+ pipelineArtifactPrefix?: string;
+ /** The pipeline output bucket to use */
+ readonly pipelineOutputBucket: s3.Bucket;
+ /** The pipeline output bucket prefix to use */
+ pipelineOutputPrefix?: string;
+ /** ECR Repository where the Build Host Image resides. */
+ readonly ecrRepository: ecr.IRepository;
+ /** Tag for the Build Host Image */
+ readonly ecrRepositoryImageTag: string;
+ /** The type of project being built. */
+ readonly projectType: ProjectType;
+ /** VPC where the networking setup resides. */
+ readonly vpc: ec2.IVpc;
+ /** Additional policy statements to add to the build project. */
+ readonly buildPolicyAdditions?: iam.PolicyStatement[];
+ /** Additional build environment variables to the build project. */
+ readonly environmentVariables?: {
+ string: codebuild.BuildEnvironmentVariable;
+ };
+ /** The encryption key use across*/
+ readonly encryptionKey: kms.Key;
+ /** Custom asset to be provided when using ProjectType.Custom */
+ readonly sourceCustomPath?: string;
+}
+
+/**
+ * The stack for creating a build pipeline.
+ *
+ * See {@link EmbeddedLinuxCodePipelineProps} for configration options.
+ */
+export class EmbeddedLinuxCodePipelineStack extends cdk.Stack {
+ constructor(
+ scope: Construct,
+ id: string,
+ props: EmbeddedLinuxCodePipelineProps,
+ ) {
+ super(scope, id, props);
+
+ if (!props.pipelineSourcePrefix) {
+ props.pipelineSourcePrefix = `${props.projectType}`;
+ }
+ if (!props.pipelineArtifactPrefix) {
+ props.pipelineArtifactPrefix = `${props.projectType}`;
+ }
+ if (!props.pipelineOutputPrefix) {
+ props.pipelineOutputPrefix = `${props.projectType}`;
+ }
+
+ /** Set up networking access and EFS FileSystems. */
+ const projectSg = new ec2.SecurityGroup(
+ this,
+ "EmbeddedLinuxCodePipelineBuildProjectSecurityGroup",
+ {
+ vpc: props.vpc,
+ description: "Security Group to allow attaching EFS",
+ },
+ );
+ projectSg.addIngressRule(
+ ec2.Peer.ipv4(props.vpc.vpcCidrBlock),
+ ec2.Port.tcp(2049),
+ "NFS Mount Port",
+ );
+ const efsFileSystem: efs.FileSystem = new efs.FileSystem(
+ this,
+ `EmbeddedLinuxCodePipelineFileSystem`,
+ {
+ vpc: props.vpc,
+ allowAnonymousAccess: true,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ },
+ );
+ efsFileSystem.connections.allowFrom(projectSg, ec2.Port.tcp(2049));
+
+ // create the policy & role for the source bucket deployment
+ const pipelineSourceBucketDeploymentPolicy = new iam.PolicyDocument({
+ statements: [
+ new iam.PolicyStatement({
+ actions: [
+ "logs:CreateLogGroup",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ ],
+ resources: [
+ `arn:aws:logs:${cdk.Stack.of(this).region}:${cdk.Stack.of(this).account}:log-group:/aws/lambda/EmbeddedLinuxCodePipelineBaseImage-CustomCDKBucketDeployment*`,
+ ],
+ }),
+ ],
+ });
+ const pipelineSourceBucketDeploymentRole = new iam.Role(
+ this,
+ "EmbeddedLinuxCodePipelineBucketDeploymentRole",
+ {
+ assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
+ inlinePolicies: { pipelineSourceBucketDeploymentPolicy },
+ },
+ );
+
+ // archive and upload the source-repo folder into CDK owned bucket
+ let sourcePath = path.join(
+ __dirname,
+ "..",
+ "source-repo",
+ props.projectType,
+ );
+ if (props.projectType == ProjectType.Custom) {
+ if (!props.sourceCustomPath) {
+ throw new Error(
+ `sourceCustomPath must be provided when using ProjectType.Custom`,
+ );
+ }
+ if (!fs.existsSync(`${props.sourceCustomPath}/build.buildspec.yml`)) {
+ throw new Error(
+ `sourceCustomPath must be provide a valid path to a build.buildspec.yml file (sourceCustomPath = ${props.sourceCustomPath})`,
+ );
+ }
+
+ sourcePath = props.sourceCustomPath;
+ }
+ const sourceRepoAsset: Asset = new Asset(
+ this,
+ "EmbeddedLinuxCodePipelineBucketDeploymentAsset",
+ { path: sourcePath },
+ );
+
+ // deploy the sourceRepo to the bucket
+ const bucketDeployment = new BucketDeployment(
+ this,
+ "EmbeddedLinuxCodePipelineBucketDeployment",
+ {
+ sources: [
+ Source.bucket(sourceRepoAsset.bucket, sourceRepoAsset.s3ObjectKey),
+ ],
+ destinationBucket: props.pipelineSourceBucket,
+ role: pipelineSourceBucketDeploymentRole,
+ extract: false,
+ destinationKeyPrefix: props.pipelineSourcePrefix,
+ },
+ );
+
+ /** Create our CodeCodePipeline Actions. */
+ const sourceActionOutputArtifact = new codepipeline.Artifact("Source");
+ const sourceAction = new codepipeline_actions.S3SourceAction({
+ actionName: "Source",
+ trigger: codepipeline_actions.S3Trigger.EVENTS,
+ output: sourceActionOutputArtifact,
+ bucket: props.pipelineSourceBucket,
+ bucketKey: `${props.pipelineSourcePrefix}/${sourceRepoAsset.s3ObjectKey}`,
+ });
+
+ // adding the proper roles and policies in case the pipeline will export the image as an AMI
+ const vmImportRole = this.createVMImportRole(id, props);
+
+ /** Create our CodeCodePipeline Project. */
+ const project = new codebuild.PipelineProject(
+ this,
+ "EmbeddedLinuxCodePipelineProject",
+ {
+ projectName: `${id}`,
+ buildSpec: codebuild.BuildSpec.fromSourceFilename(
+ "build.buildspec.yml",
+ ),
+ environment: {
+ computeType: codebuild.ComputeType.X_LARGE,
+ buildImage: codebuild.LinuxBuildImage.fromEcrRepository(
+ props.ecrRepository,
+ props.ecrRepositoryImageTag,
+ ),
+ privileged: true,
+ environmentVariables: {
+ ...props.environmentVariables,
+ AWS_ACCOUNT_ID: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: cdk.Stack.of(this).account,
+ },
+ AWS_DEFAULT_REGION: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: cdk.Stack.of(this).region,
+ },
+ PIPELINE_PROJECT_NAME: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: id,
+ },
+ PIPELINE_OUTPUT_BUCKET: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: props.pipelineOutputBucket.bucketName,
+ },
+ PIPELINE_OUTPUT_BUCKET_PREFIX: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: props.pipelineOutputPrefix,
+ },
+ VM_IMPORT_ROLE: {
+ type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
+ value: vmImportRole.roleName,
+ },
+ },
+ },
+ timeout: cdk.Duration.hours(4),
+ vpc: props.vpc,
+ securityGroups: [projectSg],
+ fileSystemLocations: [
+ codebuild.FileSystemLocation.efs({
+ identifier: "nfs",
+ location: `${efsFileSystem.fileSystemId}.efs.${efsFileSystem.env.region}.amazonaws.com:/`,
+ mountPoint: "/nfs",
+ }),
+ ],
+ logging: {
+ cloudWatch: {
+ logGroup: new logs.LogGroup(
+ this,
+ "EmbeddedLinuxCodePipelineProjectLogs",
+ {
+ logGroupName: `${id}-EmbeddedLinuxCodePipelineProjectLogs`,
+ retention: logs.RetentionDays.ONE_YEAR,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ },
+ ),
+ },
+ },
+ encryptionKey: props.encryptionKey,
+ },
+ );
+ project.node.addDependency(bucketDeployment);
+
+ if (props.buildPolicyAdditions) {
+ props.buildPolicyAdditions.map((p) => project.addToRolePolicy(p));
+ }
+
+ // adding the proper roles and policies in case the pipeline will export the image as an AMI
+ props.pipelineOutputBucket.grantReadWrite(project);
+ this.addAMIExportPolicy(project, props);
+
+ const buildActionOutputArtifact = new codepipeline.Artifact();
+ const buildAction = new codepipeline_actions.CodeBuildAction({
+ input: sourceActionOutputArtifact,
+ actionName: "Build",
+ outputs: [buildActionOutputArtifact],
+ project,
+ });
+
+ const artifactAction: codepipeline_actions.S3DeployAction =
+ new codepipeline_actions.S3DeployAction({
+ actionName: "Artifact",
+ input: buildActionOutputArtifact,
+ bucket: props.pipelineArtifactBucket,
+ objectKey: `${props.pipelineArtifactPrefix}/${sourceRepoAsset.s3ObjectKey}`,
+ });
+
+ /** Here we create the logic to check for presence of ECR image on the CodeCodePipeline automatic triggering upon resource creation,
+ * and stop the execution if the image does not exist. */
+ const fnOnCodePipelineCreate = new lambda.Function(
+ this,
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStart",
+ {
+ runtime: lambda.Runtime.PYTHON_3_10,
+ handler: "index.handler",
+ code: lambda.Code.fromInline(`
+ import boto3
+ import json
+
+ ecr_client = boto3.client('ecr')
+ codepipeline_client = boto3.client('codepipeline')
+
+ def handler(event, context):
+ print("Received event: " + json.dumps(event, indent=2))
+ response = ecr_client.describe_images(repositoryName='${props.ecrRepository.repositoryName}', filter={'tagStatus': 'TAGGED'})
+ for i in response['imageDetails']:
+ if '${props.ecrRepositoryImageTag}' in i['ecrRepositoryImageTags']:
+ break
+ else:
+ print('OS image not found. Stopping execution.')
+ response = codepipeline_client.stop_pipeline_execution(
+ pipelineName=event['detail']['pipeline'],
+ pipelineExecutionId=event['detail']['execution-id'],
+ abandon=True,
+ reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
+ `),
+ logRetention: logs.RetentionDays.ONE_YEAR,
+ },
+ );
+
+ const pipelineCreateRule = new events.Rule(
+ this,
+ "EmbeddedLinuxCodePipelineOnCodePipelineStartRule",
+ {
+ eventPattern: {
+ detailType: ["CodeCodePipeline CodePipeline Execution State Change"],
+ source: ["aws.codepipeline"],
+ detail: {
+ state: ["STARTED"],
+ "execution-trigger": {
+ "trigger-type": ["CreateCodePipeline"],
+ },
+ },
+ },
+ },
+ );
+ pipelineCreateRule.addTarget(
+ new targets.LambdaFunction(fnOnCodePipelineCreate),
+ );
+
+ /** Now create the actual CodePipeline */
+ const pipeline = new codepipeline.Pipeline(
+ this,
+ "EmbeddedLinuxCodePipeline",
+ {
+ pipelineName: `${id}`,
+ artifactBucket: props.pipelineArtifactBucket,
+ restartExecutionOnUpdate: true,
+ pipelineType: codepipeline.PipelineType.V1,
+ stages: [
+ {
+ stageName: "Source",
+ actions: [sourceAction],
+ },
+ {
+ stageName: "Build",
+ actions: [buildAction],
+ },
+ {
+ stageName: "Artifact",
+ actions: [artifactAction],
+ },
+ ],
+ },
+ );
+ pipeline.node.addDependency(project);
+
+ const stopCodePipelinePolicy = new iam.PolicyStatement({
+ actions: ["codepipeline:StopCodePipelineExecution"],
+ resources: [pipeline.pipelineArn],
+ });
+
+ const ecrPolicy = new iam.PolicyStatement({
+ actions: ["ecr:DescribeImages"],
+ resources: [props.ecrRepository.repositoryArn],
+ });
+ fnOnCodePipelineCreate.role?.attachInlinePolicy(
+ new iam.Policy(this, "EmbeddedLinuxCodePipelineCheckOSAndStop", {
+ statements: [stopCodePipelinePolicy, ecrPolicy],
+ }),
+ );
+
+ // Run this pipeline weekly to update the image OS regularly.
+ const pipelineTarget = new events_target.CodePipeline(pipeline);
+ new events.Rule(this, "EmbeddedLinuxCodePipelineWeeklyRefreshSchedule", {
+ schedule: events.Schedule.cron({
+ weekDay: "Tuesday",
+ minute: "0",
+ hour: "6",
+ }),
+ targets: [pipelineTarget],
+ });
+
+ // Add stack output for the source-repo bucket uri for this pipeline
+ new cdk.CfnOutput(this, "SourceURI", {
+ value: `s3://${props.pipelineSourceBucket.bucketName}/${props.pipelineSourcePrefix}/${sourceRepoAsset.s3ObjectKey}`,
+ description: "The source bucket uri for this pipeline.",
+ });
+
+ new cdk.CfnOutput(this, "OutputURI", {
+ value: `s3://${props.pipelineOutputBucket.bucketName}/${props.pipelineOutputPrefix}`,
+ description: "The output bucket of this pipeline.",
+ });
+
+ new cdk.CfnOutput(this, "ArtifactURI", {
+ value: `s3://${props.pipelineArtifactBucket.bucketName}/${props.pipelineArtifactPrefix}/${sourceRepoAsset.s3ObjectKey}`,
+ description: "The artifact bucket of this pipeline.",
+ });
+ }
+
+ private createVMImportRole(
+ id: string,
+ props: EmbeddedLinuxCodePipelineProps,
+ ) {
+ // Adapted from meta-aws-ewaol and
+ // https://docs.aws.amazon.com/vm-import/latest/userguide/required-permissions.html
+ const vmImportPolicy = new iam.PolicyDocument({
+ statements: [
+ new iam.PolicyStatement({
+ actions: ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"],
+ resources: [
+ props.pipelineOutputBucket.bucketArn,
+ `${props.pipelineOutputBucket.bucketArn}/*`,
+ ],
+ }),
+ new iam.PolicyStatement({
+ actions: ["ec2:CreateTags", "ec2:DescribeTags"],
+ resources: ["*"],
+ conditions: {
+ StringEquals: {
+ "ec2:ResourceTag/CreatedBy": [id],
+ },
+ },
+ }),
+ new iam.PolicyStatement({
+ actions: ["ec2:CopySnapshot"],
+ resources: [`arn:aws:ec2:${cdk.Stack.of(this).region}::snapshot/*`],
+ }),
+ new iam.PolicyStatement({
+ actions: ["ec2:DescribeSnapshots"],
+ resources: ["*"],
+ }),
+ new iam.PolicyStatement({
+ actions: [
+ "kms:CreateGrant",
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:GenerateDataKeyWithoutPlaintext",
+ ],
+ resources: [props.encryptionKey.keyArn],
+ }),
+ ],
+ });
+
+ const vmImportRole = new iam.Role(
+ this,
+ "EmbeddedLinuxCodePipelineVMImportRole",
+ {
+ roleName: `${id}-vm-mport`,
+ assumedBy: new iam.ServicePrincipal("vmie.amazonaws.com"),
+ externalIds: ["vmimport"],
+ inlinePolicies: { vmImportPolicy },
+ },
+ );
+ return vmImportRole;
+ }
+
+ private addAMIExportPolicy(
+ project: codebuild.PipelineProject,
+ props: EmbeddedLinuxCodePipelineProps,
+ ) {
+ project.addToRolePolicy(
+ new iam.PolicyStatement({
+ actions: [
+ "ec2:CreateImage",
+ "ec2:CreateTags",
+ "ec2:DescribeImages",
+ "ec2:DescribeSnapshots",
+ "ec2:DescribeImportSnapshotTasks",
+ "ec2:DescribeTags",
+ "ec2:CancelImportTask",
+ ],
+ resources: ["*"],
+ }),
+ );
+ project.addToRolePolicy(
+ new iam.PolicyStatement({
+ actions: ["ec2:ImportSnapshot"],
+ resources: [
+ `arn:aws:ec2:${cdk.Stack.of(this).region}:${cdk.Stack.of(this).account}:import-snapshot-task/*`,
+ `arn:aws:ec2:${cdk.Stack.of(this).region}::snapshot/*`,
+ ],
+ }),
+ );
+ //Permissions for BackUp to S3
+ project.addToRolePolicy(
+ new iam.PolicyStatement({
+ actions: [
+ "s3:GetObject",
+ "s3:ListBucket",
+ "s3:PutObject",
+ "s3:PutObjectTagging",
+ "s3:AbortMultipartUpload",
+ ],
+ resources: [
+ `${props.pipelineOutputBucket.bucketArn}`,
+ `${props.pipelineOutputBucket.bucketArn}/*`,
+ ],
+ }),
+ );
+ project.addToRolePolicy(
+ new iam.PolicyStatement({
+ actions: [
+ "ec2:RegisterImage",
+ "ec2:DeregisterImage",
+ "ec2:CreateStoreImageTask",
+ ],
+ resources: [
+ `arn:aws:ec2:${cdk.Stack.of(this).region}::image/*`,
+ `arn:aws:ec2:${cdk.Stack.of(this).region}::snapshot/snap-*`,
+ ],
+ }),
+ );
+ project.addToRolePolicy(
+ new iam.PolicyStatement({
+ actions: [
+ "ebs:CompleteSnapshot",
+ "ebs:GetSnapshotBlock",
+ "ebs:ListChangedBlocks",
+ "ebs:ListSnapshotBlocks",
+ "ebs:PutSnapshotBlock",
+ ],
+ resources: [`arn:aws:ec2:${cdk.Stack.of(this).region}::snapshot/*`],
+ }),
+ );
+ project.addToRolePolicy(
+ new iam.PolicyStatement({
+ actions: [
+ "ec2:DescribeStoreImageTasks",
+ "ec2:GetEbsEncryptionByDefault",
+ ],
+ resources: ["*"],
+ }),
+ );
+ }
+}
diff --git a/lib/codepipeline-resources.ts b/lib/codepipeline-resources.ts
new file mode 100644
index 0000000..28ced5d
--- /dev/null
+++ b/lib/codepipeline-resources.ts
@@ -0,0 +1,173 @@
+import * as cdk from "aws-cdk-lib";
+import { Construct } from "constructs";
+import * as s3 from "aws-cdk-lib/aws-s3";
+import * as ecr from "aws-cdk-lib/aws-ecr";
+import * as kms from "aws-cdk-lib/aws-kms";
+import * as ec2 from "aws-cdk-lib/aws-ec2";
+import * as logs from "aws-cdk-lib/aws-logs";
+
+/**
+ * Select options for the {@link PipelineResourcesStack}.
+ */
+export interface PipelineResourcesProps extends cdk.StackProps {
+ /** The resource prefix*/
+ readonly resource_prefix: string;
+ /** The ecr repository name - if not provided then the name will be '{prefix}-{account}-{region}-repo'*/
+ readonly ecrRepositoryName?: string;
+ /** The artifact bucket name - if not provided then the name will be '{prefix}-{account}-{region}-artifact'*/
+ readonly pipelineArtifactBucketName?: string;
+ /** The source bucket name - if not provided then the name will be '{prefix}-{account}-{region}-source'*/
+ readonly pipelineSourceBucketName?: string;
+ /** The output bucket name - if not provided then the name will be '{prefix}-{account}-{region}-output'*/
+ readonly pipelineOutputBucketName?: string;
+ /** Cloudwatch logging bucket name - if not provided then the name will be '{prefix}-{account}-{region}-logs'*/
+ readonly loggingBucketName?: string;
+}
+
+/**
+ * Input (Source) data for our {@link PipelineResourcesStack}.
+ */
+export class PipelineResourcesStack extends cdk.Stack {
+ /** The VPC for the pipeline to reside in. */
+ public readonly vpc: ec2.IVpc;
+ /** The respository to put the build host container in. */
+ public readonly ecrRepository: ecr.IRepository;
+ /** The artifact bucket*/
+ readonly pipelineArtifactBucket: s3.Bucket;
+ /** The source bucket*/
+ readonly pipelineSourceBucket: s3.Bucket;
+ /** The output bucket*/
+ readonly pipelineOutputBucket: s3.Bucket;
+ /** The Cloudwatch logging bucket*/
+ public readonly loggingBucket?: s3.Bucket;
+ /** The encryption key use across*/
+ public readonly encryptionKey: kms.Key;
+
+ constructor(scope: Construct, id: string, props: PipelineResourcesProps) {
+ super(scope, id, props);
+
+ const ecrRepositoryName = props.ecrRepositoryName
+ ? props.ecrRepositoryName
+ : `${props.resource_prefix}-${cdk.Stack.of(this).account}-${cdk.Stack.of(this).region}-repo`.toLowerCase();
+ const pipelineArtifactBucketName = props.pipelineArtifactBucketName
+ ? props.pipelineArtifactBucketName
+ : `${props.resource_prefix}-${cdk.Stack.of(this).account}-${cdk.Stack.of(this).region}-artifact`.toLowerCase();
+ const pipelineSourceBucketName = props.pipelineSourceBucketName
+ ? props.pipelineSourceBucketName
+ : `${props.resource_prefix}-${cdk.Stack.of(this).account}-${cdk.Stack.of(this).region}-source`.toLowerCase();
+ const pipelineOutputBucketName = props.pipelineOutputBucketName
+ ? props.pipelineOutputBucketName
+ : `${props.resource_prefix}-${cdk.Stack.of(this).account}-${cdk.Stack.of(this).region}-output`.toLowerCase();
+ const loggingBucketName = props.loggingBucketName
+ ? props.loggingBucketName
+ : `${props.resource_prefix}-${cdk.Stack.of(this).account}-${cdk.Stack.of(this).region}-logs`.toLowerCase();
+
+ // We will create a VPC with 3 Private and Public subnets for AWS
+ // Resources that have network interfaces (e.g. Connecting and EFS
+ // Filesystem to a CodeBuild Project).
+ this.vpc = new ec2.Vpc(this, "PipelineResourcesVpc", {
+ ipAddresses: ec2.IpAddresses.cidr("10.0.0.0/16"),
+ });
+
+ new ec2.FlowLog(this, "PipelineResourcesVPCFlowLogs", {
+ resourceType: ec2.FlowLogResourceType.fromVpc(this.vpc),
+ destination: ec2.FlowLogDestination.toCloudWatchLogs(
+ new logs.LogGroup(this, "PipelineResourcesVPCFlowLogGroup", {
+ logGroupName: `${id}-PipelineResourcesVPCFlowLogGroup`,
+ retention: logs.RetentionDays.ONE_YEAR,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ }),
+ ),
+ });
+
+ this.ecrRepository = new ecr.Repository(
+ this,
+ "PipelineResourcesECRRepository",
+ {
+ repositoryName: ecrRepositoryName,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ emptyOnDelete: true,
+ },
+ );
+
+ this.encryptionKey = new kms.Key(this, "PipelineResourcesArtifactKey", {
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ enableKeyRotation: true,
+ });
+
+ // Create a bucket, then allow a deployment Lambda to upload to it.
+ this.loggingBucket = new s3.Bucket(this, "PipelineResourcesLoggingBucket", {
+ bucketName: loggingBucketName,
+ versioned: true,
+ enforceSSL: true,
+ autoDeleteObjects: true,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ encryptionKey: this.encryptionKey,
+ });
+
+ this.pipelineSourceBucket = new s3.Bucket(
+ this,
+ "PipelineResourcesSourceBucket",
+ {
+ bucketName: pipelineSourceBucketName,
+ versioned: true,
+ enforceSSL: true,
+ autoDeleteObjects: true,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ encryptionKey: this.encryptionKey,
+ serverAccessLogsBucket: this.loggingBucket,
+ serverAccessLogsPrefix: "source-bucket",
+ },
+ );
+
+ this.pipelineArtifactBucket = new s3.Bucket(
+ this,
+ "PipelineResourcesArtifactBucket",
+ {
+ bucketName: pipelineArtifactBucketName,
+ versioned: true,
+ enforceSSL: true,
+ autoDeleteObjects: true,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ encryptionKey: this.encryptionKey,
+ serverAccessLogsBucket: this.loggingBucket,
+ serverAccessLogsPrefix: "artifact-bucket",
+ },
+ );
+
+ this.pipelineOutputBucket = new s3.Bucket(
+ this,
+ "PipelineResourcesOutputBucket",
+ {
+ bucketName: pipelineOutputBucketName,
+ versioned: true,
+ enforceSSL: true,
+ autoDeleteObjects: true,
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ encryptionKey: this.encryptionKey,
+ serverAccessLogsBucket: this.loggingBucket,
+ serverAccessLogsPrefix: "output-bucket",
+ },
+ );
+
+ new cdk.CfnOutput(this, "LoggingBucket", {
+ value: this.loggingBucket.bucketName,
+ description: "The access logging bucket.",
+ });
+
+ new cdk.CfnOutput(this, "SourceBucket", {
+ value: this.pipelineSourceBucket.bucketName,
+ description: "The source bucket.",
+ });
+
+ new cdk.CfnOutput(this, "ArtifactBucket", {
+ value: this.pipelineArtifactBucket.bucketName,
+ description: "The artifact bucket.",
+ });
+
+ new cdk.CfnOutput(this, "OutputBucket", {
+ value: this.pipelineOutputBucket.bucketName,
+ description: "The output bucket.",
+ });
+ }
+}
diff --git a/lib/constructs/source-repo.ts b/lib/constructs/source-repo.ts
deleted file mode 100644
index ccc0724..0000000
--- a/lib/constructs/source-repo.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Construct } from 'constructs';
-import { Code, Repository } from 'aws-cdk-lib/aws-codecommit';
-
-import * as path from 'path';
-
-/**
- * The kind of project built.
- */
-export enum ProjectKind {
- /** Build core-image-minimal from poky. */
- Poky = 'poky',
- /** Build the Qemu meta-aws Demonstration Distribution. */
- MetaAwsDemo = 'meta-aws-demo',
- /** Build an EC2 AMI */
- PokyAmi = 'poky-ami',
- /** Build an kas based image */
- Kas = 'kas',
- /** Build an Renesas image */
- Renesas = 'renesas',
- /** Build an IMX image using NXP layers. */
- NxpImx = 'nxp-imx',
- /** Build no pipeline, just CodeBuild project to connect with GitHub actions. */
- CodeBuild = 'codebuild',
-}
-
-export interface SourceRepoProps extends cdk.StackProps {
- /** The name of the CodeCommit Repository created. */
- readonly repoName: string;
- /** The type of project to seed this repository with. */
- readonly kind: ProjectKind;
-}
-
-/**
- * The repository for the Source Stage of the pipeline.
- *
- * The initial contents of this repository are seeded by the assets contained
- * in the `source-repo/` folder of this library.
- */
-export class SourceRepo extends Construct {
- /** The CodeCommit Repo itself. */
- readonly repo: Repository;
-
- constructor(scope: Construct, id: string, props: SourceRepoProps) {
- super(scope, id);
-
- this.repo = new Repository(this, 'SourceRepository', {
- repositoryName: props.repoName,
- code: Code.fromDirectory(
- path.join(__dirname, '..', '..', 'source-repo', props.kind),
- 'main'
- ),
- });
- }
-}
diff --git a/lib/embedded-linux-codebuild-project.ts b/lib/embedded-linux-codebuild-project.ts
deleted file mode 100644
index 544a67c..0000000
--- a/lib/embedded-linux-codebuild-project.ts
+++ /dev/null
@@ -1,261 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Construct } from 'constructs';
-import * as events from 'aws-cdk-lib/aws-events';
-import * as targets from 'aws-cdk-lib/aws-events-targets';
-import * as lambda from 'aws-cdk-lib/aws-lambda';
-import * as iam from 'aws-cdk-lib/aws-iam';
-import * as efs from 'aws-cdk-lib/aws-efs';
-import * as s3 from 'aws-cdk-lib/aws-s3';
-
-import {
- BuildSpec,
- ComputeType,
- FileSystemLocation,
- LinuxBuildImage,
- Project,
-} from 'aws-cdk-lib/aws-codebuild';
-import { IRepository } from 'aws-cdk-lib/aws-ecr';
-
-import {
- ISecurityGroup,
- IVpc,
- Peer,
- Port,
- SecurityGroup,
-} from 'aws-cdk-lib/aws-ec2';
-import { ProjectKind } from './constructs/source-repo';
-import { VMImportBucket } from './vm-import-bucket';
-import { LogGroup, RetentionDays } from 'aws-cdk-lib/aws-logs';
-import { RemovalPolicy } from 'aws-cdk-lib';
-
-/**
- * Properties to allow customizing the build.
- */
-export interface EmbeddedLinuxCodebuildProjectProps extends cdk.StackProps {
- /** ECR Repository where the Build Host Image resides. */
- readonly imageRepo: IRepository;
- /** Tag for the Build Host Image */
- readonly imageTag?: string;
- /** VPC where the networking setup resides. */
- readonly vpc: IVpc;
- /** The type of project being built. */
- readonly projectKind?: ProjectKind;
- /** A name for the layer-repo that is created. Default is 'layer-repo' */
- readonly layerRepoName?: string;
- /** Additional policy statements to add to the build project. */
- readonly buildPolicyAdditions?: iam.PolicyStatement[];
- /** Access logging bucket to use */
- readonly accessLoggingBucket?: s3.Bucket;
- /** Access logging prefix to use */
- readonly serverAccessLogsPrefix?: string;
- /** Artifact bucket to use */
- readonly artifactBucket?: s3.Bucket;
- /** Output bucket to use */
- readonly outputBucket?: s3.Bucket | VMImportBucket;
- /** Prefix for S3 object within bucket */
- readonly subDirectoryName?: string;
-}
-
-/**
- * The stack for creating a build pipeline.
- *
- * See {@link EmbeddedLinuxCodebuildProjectProps} for configration options.
- */
-export class EmbeddedLinuxCodebuildProjectStack extends cdk.Stack {
- constructor(
- scope: Construct,
- id: string,
- props: EmbeddedLinuxCodebuildProjectProps
- ) {
- super(scope, id, props);
-
- /** Set up networking access and EFS FileSystems. */
-
- const projectSg = new SecurityGroup(this, 'BuildProjectSecurityGroup', {
- vpc: props.vpc,
- description: 'Security Group to allow attaching EFS',
- });
- projectSg.addIngressRule(
- Peer.ipv4(props.vpc.vpcCidrBlock),
- Port.tcp(2049),
- 'NFS Mount Port'
- );
-
- const sstateFS = this.addFileSystem('SState', props.vpc, projectSg);
- const dlFS = this.addFileSystem('Downloads', props.vpc, projectSg);
- const tmpFS = this.addFileSystem('Temp', props.vpc, projectSg);
-
- // let accessLoggingBucket: s3.IBucket;
-
- if (props.accessLoggingBucket) {
- // accessLoggingBucket = props.accessLoggingBucket;
- } else {
- /* accessLoggingBucket = */
- new s3.Bucket(this, 'ArtifactAccessLogging', {
- versioned: true,
- enforceSSL: true,
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
- }
-
- /** Create our CodeBuild Project. */
- const project = new Project(this, 'EmbeddedLinuxCodebuildProject', {
- buildSpec: BuildSpec.fromObject({
- version: '0.2',
- phases: {
- build: {
- commands: ['echo "DUMMY BUILDSPEC - can not be empty"'],
- },
- },
- artifacts: {
- files: ['**/*'],
- 'base-directory': '.',
- },
- }),
- environment: {
- computeType: ComputeType.X2_LARGE,
- buildImage: LinuxBuildImage.fromEcrRepository(
- props.imageRepo,
- props.imageTag
- ),
- privileged: true,
- },
- timeout: cdk.Duration.hours(4),
- vpc: props.vpc,
- securityGroups: [projectSg],
- fileSystemLocations: [
- FileSystemLocation.efs({
- identifier: 'tmp_dir',
- location: tmpFS,
- mountPoint: '/build-output',
- }),
- FileSystemLocation.efs({
- identifier: 'sstate_cache',
- location: sstateFS,
- mountPoint: '/sstate-cache',
- }),
- FileSystemLocation.efs({
- identifier: 'dl_dir',
- location: dlFS,
- mountPoint: '/downloads',
- }),
- ],
- logging: {
- cloudWatch: {
- logGroup: new LogGroup(this, 'PipelineBuildLogs', {
- retention: RetentionDays.TEN_YEARS,
- }),
- },
- },
- });
-
- if (props.buildPolicyAdditions) {
- props.buildPolicyAdditions.map((p) => project.addToRolePolicy(p));
- }
-
- project.addToRolePolicy(this.addProjectPolicies());
-
- project.role?.addManagedPolicy(
- iam.ManagedPolicy.fromAwsManagedPolicyName('AWSCodeBuildAdminAccess')
- );
-
- /** Here we create the logic to check for presence of ECR image on the CodePipeline automatic triggering upon resource creation,
- * and stop the execution if the image does not exist. */
- const fnOnPipelineCreate = new lambda.Function(
- this,
- 'OSImageCheckOnStart',
- {
- runtime: lambda.Runtime.PYTHON_3_10,
- handler: 'index.handler',
- code: lambda.Code.fromInline(`
-import boto3
-import json
-
-ecr_client = boto3.client('ecr')
-codepipeline_client = boto3.client('codepipeline')
-
-def handler(event, context):
- print("Received event: " + json.dumps(event, indent=2))
- response = ecr_client.describe_images(repositoryName='${props.imageRepo.repositoryName}', filter={'tagStatus': 'TAGGED'})
- for i in response['imageDetails']:
- if '${props.imageTag}' in i['imageTags']:
- break
- else:
- print('OS image not found. Stopping execution.')
- response = codepipeline_client.stop_pipeline_execution(
- pipelineName=event['detail']['pipeline'],
- pipelineExecutionId=event['detail']['execution-id'],
- abandon=True,
- reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
- `),
- logRetention: RetentionDays.TEN_YEARS,
- }
- );
-
- const pipelineCreateRule = new events.Rule(this, 'OnPipelineStartRule', {
- eventPattern: {
- detailType: ['CodePipeline Pipeline Execution State Change'],
- source: ['aws.codepipeline'],
- detail: {
- state: ['STARTED'],
- 'execution-trigger': {
- 'trigger-type': ['CreatePipeline'],
- },
- },
- },
- });
- pipelineCreateRule.addTarget(
- new targets.LambdaFunction(fnOnPipelineCreate)
- );
- }
-
- /**
- * Adds an EFS FileSystem to the VPC and SecurityGroup.
- *
- * @param name - A name to differentiate the filesystem.
- * @param vpc - The VPC the Filesystem resides in.
- * @param securityGroup - A SecurityGroup to allow access to the filesystem from.
- * @returns The filesystem location URL.
- *
- */
- private addFileSystem(
- name: string,
- vpc: IVpc,
- securityGroup: ISecurityGroup
- ): string {
- const fs = new efs.FileSystem(
- this,
- `EmbeddedLinuxPipeline${name}Filesystem`,
- {
- vpc,
- removalPolicy: cdk.RemovalPolicy.DESTROY,
- }
- );
-
- fs.connections.allowFrom(securityGroup, Port.tcp(2049));
-
- const fsId = fs.fileSystemId;
- const region = cdk.Stack.of(this).region;
-
- return `${fsId}.efs.${region}.amazonaws.com:/`;
- }
-
- private addProjectPolicies(): iam.PolicyStatement {
- return new iam.PolicyStatement({
- actions: [
- 'ec2:DescribeSecurityGroups',
- 'codestar-connections:GetConnection',
- 'codestar-connections:GetConnectionToken',
- 'codeconnections:GetConnectionToken',
- 'codeconnections:GetConnection',
- 'codeconnections:UseConnection',
- 'codebuild:ListConnectedOAuthAccounts',
- 'codebuild:ListRepositories',
- 'codebuild:PersistOAuthToken',
- 'codebuild:ImportSourceCredentials',
- ],
- resources: ['*'],
- });
- }
-}
diff --git a/lib/embedded-linux-pipeline.ts b/lib/embedded-linux-pipeline.ts
deleted file mode 100644
index 7e8af5e..0000000
--- a/lib/embedded-linux-pipeline.ts
+++ /dev/null
@@ -1,475 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Construct } from 'constructs';
-import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
-import * as codepipeline_actions from 'aws-cdk-lib/aws-codepipeline-actions';
-import * as events from 'aws-cdk-lib/aws-events';
-import * as targets from 'aws-cdk-lib/aws-events-targets';
-import * as lambda from 'aws-cdk-lib/aws-lambda';
-import * as iam from 'aws-cdk-lib/aws-iam';
-import * as efs from 'aws-cdk-lib/aws-efs';
-import * as kms from 'aws-cdk-lib/aws-kms';
-import * as s3 from 'aws-cdk-lib/aws-s3';
-import * as path from 'path';
-
-import {
- BuildEnvironmentVariableType,
- BuildSpec,
- ComputeType,
- FileSystemLocation,
- LinuxBuildImage,
- PipelineProject,
-} from 'aws-cdk-lib/aws-codebuild';
-import { IRepository } from 'aws-cdk-lib/aws-ecr';
-
-import {
- ISecurityGroup,
- IVpc,
- Peer,
- Port,
- SecurityGroup,
-} from 'aws-cdk-lib/aws-ec2';
-import { SourceRepo, ProjectKind } from './constructs/source-repo';
-import { VMImportBucket } from './vm-import-bucket';
-import { Asset } from 'aws-cdk-lib/aws-s3-assets';
-import { LogGroup, RetentionDays } from 'aws-cdk-lib/aws-logs';
-import { RemovalPolicy } from 'aws-cdk-lib';
-
-/**
- * Properties to allow customizing the build.
- */
-export interface EmbeddedLinuxPipelineProps extends cdk.StackProps {
- /** ECR Repository where the Build Host Image resides. */
- readonly imageRepo: IRepository;
- /** Tag for the Build Host Image */
- readonly imageTag?: string;
- /** VPC where the networking setup resides. */
- readonly vpc: IVpc;
- /** The type of project being built. */
- readonly projectKind?: ProjectKind;
- /** A name for the layer-repo that is created. Default is 'layer-repo' */
- readonly layerRepoName?: string;
- /** Additional policy statements to add to the build project. */
- readonly buildPolicyAdditions?: iam.PolicyStatement[];
- /** Access logging bucket to use */
- readonly accessLoggingBucket?: s3.Bucket;
- /** Access logging prefix to use */
- readonly serverAccessLogsPrefix?: string;
- /** Artifact bucket to use */
- readonly artifactBucket?: s3.Bucket;
- /** Output bucket to use */
- readonly outputBucket?: s3.Bucket | VMImportBucket;
- /** Prefix for S3 object within bucket */
- readonly subDirectoryName?: string;
-}
-
-/**
- * The stack for creating a build pipeline.
- *
- * See {@link EmbeddedLinuxPipelineProps} for configration options.
- */
-export class EmbeddedLinuxPipelineStack extends cdk.Stack {
- constructor(scope: Construct, id: string, props: EmbeddedLinuxPipelineProps) {
- super(scope, id, props);
-
- /** Set up networking access and EFS FileSystems. */
-
- const projectSg = new SecurityGroup(this, 'BuildProjectSecurityGroup', {
- vpc: props.vpc,
- description: 'Security Group to allow attaching EFS',
- });
- projectSg.addIngressRule(
- Peer.ipv4(props.vpc.vpcCidrBlock),
- Port.tcp(2049),
- 'NFS Mount Port'
- );
-
- const sstateFS = this.addFileSystem('SState', props.vpc, projectSg);
- const dlFS = this.addFileSystem('Downloads', props.vpc, projectSg);
- const tmpFS = this.addFileSystem('Temp', props.vpc, projectSg);
-
- let outputBucket: s3.IBucket | VMImportBucket;
- let environmentVariables = {};
- let scriptAsset!: Asset;
- let accessLoggingBucket: s3.IBucket;
-
- if (props.accessLoggingBucket) {
- accessLoggingBucket = props.accessLoggingBucket;
- } else {
- accessLoggingBucket = new s3.Bucket(this, 'ArtifactAccessLogging', {
- versioned: true,
- enforceSSL: true,
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
- }
-
- if (props.projectKind && props.projectKind == ProjectKind.PokyAmi) {
- scriptAsset = new Asset(this, 'CreateAMIScript', {
- path: path.join(__dirname, '../assets/create-ec2-ami.sh'),
- });
-
- const outputBucketEncryptionKey = new kms.Key(
- this,
- 'OutputBucketEncryptionKey',
- {
- removalPolicy: RemovalPolicy.DESTROY,
- enableKeyRotation: true,
- }
- );
-
- if (props.outputBucket) {
- outputBucket = props.outputBucket;
- } else {
- outputBucket = new VMImportBucket(this, 'PipelineOutput', {
- versioned: true,
- enforceSSL: true,
- encryptionKey: outputBucketEncryptionKey,
- encryptionKeyArn: outputBucketEncryptionKey.keyArn,
- serverAccessLogsBucket: accessLoggingBucket,
- serverAccessLogsPrefix: props.serverAccessLogsPrefix,
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
- }
- environmentVariables = {
- IMPORT_BUCKET: {
- type: BuildEnvironmentVariableType.PLAINTEXT,
- value: outputBucket.bucketName,
- },
- ROLE_NAME: {
- type: BuildEnvironmentVariableType.PLAINTEXT,
- value: (outputBucket as VMImportBucket).roleName,
- },
- SCRIPT_URL: {
- type: BuildEnvironmentVariableType.PLAINTEXT,
- value: scriptAsset.s3ObjectUrl,
- },
- };
- } else {
- if (props.outputBucket) {
- outputBucket = props.outputBucket;
- } else {
- outputBucket = new s3.Bucket(this, 'PipelineOutput', {
- versioned: true,
- enforceSSL: true,
- serverAccessLogsBucket: accessLoggingBucket,
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
- }
- }
-
- let artifactBucket: s3.IBucket;
-
- if (props.artifactBucket) {
- artifactBucket = props.artifactBucket;
- } else {
- const encryptionKey = new kms.Key(this, 'PipelineArtifactKey', {
- removalPolicy: RemovalPolicy.DESTROY,
- enableKeyRotation: true,
- });
- artifactBucket = new s3.Bucket(this, 'PipelineArtifacts', {
- versioned: true,
- enforceSSL: true,
- serverAccessLogsBucket: accessLoggingBucket,
- encryptionKey,
- encryption: s3.BucketEncryption.KMS,
- blockPublicAccess: new s3.BlockPublicAccess(
- s3.BlockPublicAccess.BLOCK_ALL
- ),
- autoDeleteObjects: true,
- removalPolicy: RemovalPolicy.DESTROY,
- });
- }
-
- /** Create our CodePipeline Actions. */
- const sourceRepo = new SourceRepo(this, 'SourceRepo', {
- ...props,
- repoName: props.layerRepoName ?? `layer-repo-${this.stackName}`,
- kind: props.projectKind ?? ProjectKind.Poky,
- });
-
- const sourceOutput = new codepipeline.Artifact();
- const sourceAction = new codepipeline_actions.CodeCommitSourceAction({
- // trigger: CodeCommitTrigger.NONE,
- output: sourceOutput,
- actionName: 'Source',
- repository: sourceRepo.repo,
- branch: 'main',
- codeBuildCloneOutput: true,
- });
-
- const project = new PipelineProject(this, 'EmbeddedLinuxBuildProject', {
- buildSpec: BuildSpec.fromSourceFilename('build.buildspec.yml'),
- environment: {
- computeType: ComputeType.X2_LARGE,
- buildImage: LinuxBuildImage.fromEcrRepository(
- props.imageRepo,
- props.imageTag
- ),
- privileged: true,
- environmentVariables,
- },
- timeout: cdk.Duration.hours(4),
- vpc: props.vpc,
- securityGroups: [projectSg],
- fileSystemLocations: [
- FileSystemLocation.efs({
- identifier: 'tmp_dir',
- location: tmpFS,
- mountPoint: '/build-output',
- }),
- FileSystemLocation.efs({
- identifier: 'sstate_cache',
- location: sstateFS,
- mountPoint: '/sstate-cache',
- }),
- FileSystemLocation.efs({
- identifier: 'dl_dir',
- location: dlFS,
- mountPoint: '/downloads',
- }),
- ],
- logging: {
- cloudWatch: {
- logGroup: new LogGroup(this, 'PipelineBuildLogs', {
- retention: RetentionDays.TEN_YEARS,
- }),
- },
- },
- });
-
- if (props.buildPolicyAdditions) {
- props.buildPolicyAdditions.map((p) => project.addToRolePolicy(p));
- }
-
- if (props.projectKind && props.projectKind == ProjectKind.PokyAmi) {
- outputBucket.grantReadWrite(project);
- project.addToRolePolicy(this.addVMExportPolicy());
-
- project.addToRolePolicy(
- new iam.PolicyStatement({
- actions: ['ec2:ImportSnapshot'],
- resources: [
- `arn:aws:ec2:${this.region}:${this.account}:import-snapshot-task/*`,
- `arn:aws:ec2:${this.region}::snapshot/*`,
- ],
- })
- );
- //Permissions for BackUp to S3
- project.addToRolePolicy(
- this.addAMIS3BackupPolicy(outputBucket.bucketArn)
- );
- project.addToRolePolicy(this.addAMIEC2EBSBackupPolicy(this.region));
- project.addToRolePolicy(this.addAMIEBSBackupPolicy(this.region));
- project.addToRolePolicy(this.addAMIBackupPolicy());
- scriptAsset.grantRead(project);
- }
-
- const buildOutput = new codepipeline.Artifact();
- const buildAction = new codepipeline_actions.CodeBuildAction({
- input: sourceOutput,
- actionName: 'Build',
- outputs: [buildOutput],
- project,
- });
-
- let artifactAction: codepipeline_actions.S3DeployAction;
-
- if (props.subDirectoryName) {
- artifactAction = new codepipeline_actions.S3DeployAction({
- actionName: 'Artifact',
- input: buildOutput,
- bucket: outputBucket,
- objectKey: props.subDirectoryName,
- });
- } else {
- artifactAction = new codepipeline_actions.S3DeployAction({
- actionName: 'Artifact',
- input: buildOutput,
- bucket: outputBucket,
- });
- }
-
- /** Here we create the logic to check for presence of ECR image on the CodePipeline automatic triggering upon resource creation,
- * and stop the execution if the image does not exist. */
- const fnOnPipelineCreate = new lambda.Function(
- this,
- 'OSImageCheckOnStart',
- {
- runtime: lambda.Runtime.PYTHON_3_10,
- handler: 'index.handler',
- code: lambda.Code.fromInline(`
-import boto3
-import json
-
-ecr_client = boto3.client('ecr')
-codepipeline_client = boto3.client('codepipeline')
-
-def handler(event, context):
- print("Received event: " + json.dumps(event, indent=2))
- response = ecr_client.describe_images(repositoryName='${props.imageRepo.repositoryName}', filter={'tagStatus': 'TAGGED'})
- for i in response['imageDetails']:
- if '${props.imageTag}' in i['imageTags']:
- break
- else:
- print('OS image not found. Stopping execution.')
- response = codepipeline_client.stop_pipeline_execution(
- pipelineName=event['detail']['pipeline'],
- pipelineExecutionId=event['detail']['execution-id'],
- abandon=True,
- reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
- `),
- logRetention: RetentionDays.TEN_YEARS,
- }
- );
-
- const pipelineCreateRule = new events.Rule(this, 'OnPipelineStartRule', {
- eventPattern: {
- detailType: ['CodePipeline Pipeline Execution State Change'],
- source: ['aws.codepipeline'],
- detail: {
- state: ['STARTED'],
- 'execution-trigger': {
- 'trigger-type': ['CreatePipeline'],
- },
- },
- },
- });
- pipelineCreateRule.addTarget(
- new targets.LambdaFunction(fnOnPipelineCreate)
- );
-
- /** Now create the actual Pipeline */
- const pipeline = new codepipeline.Pipeline(this, 'EmbeddedLinuxPipeline', {
- artifactBucket,
- restartExecutionOnUpdate: true,
- pipelineType: codepipeline.PipelineType.V1,
- stages: [
- {
- stageName: 'Source',
- actions: [sourceAction],
- },
- {
- stageName: 'Build',
- actions: [buildAction],
- },
- {
- stageName: 'Artifact',
- actions: [artifactAction],
- },
- ],
- });
-
- const stopPipelinePolicy = new iam.PolicyStatement({
- actions: ['codepipeline:StopPipelineExecution'],
- resources: [pipeline.pipelineArn],
- });
-
- const ecrPolicy = new iam.PolicyStatement({
- actions: ['ecr:DescribeImages'],
- resources: [props.imageRepo.repositoryArn],
- });
- fnOnPipelineCreate.role?.attachInlinePolicy(
- new iam.Policy(this, 'CheckOSAndStop', {
- statements: [stopPipelinePolicy, ecrPolicy],
- })
- );
-
- new cdk.CfnOutput(this, 'BuildOutput', {
- value: outputBucket.bucketArn,
- description: 'The output bucket of this pipeline.',
- });
- }
-
- /**
- * Adds an EFS FileSystem to the VPC and SecurityGroup.
- *
- * @param name - A name to differentiate the filesystem.
- * @param vpc - The VPC the Filesystem resides in.
- * @param securityGroup - A SecurityGroup to allow access to the filesystem from.
- * @returns The filesystem location URL.
- *
- */
- private addFileSystem(
- name: string,
- vpc: IVpc,
- securityGroup: ISecurityGroup
- ): string {
- const fs = new efs.FileSystem(
- this,
- `EmbeddedLinuxPipeline${name}Filesystem`,
- {
- vpc,
- removalPolicy: cdk.RemovalPolicy.DESTROY,
- }
- );
- fs.connections.allowFrom(securityGroup, Port.tcp(2049));
-
- const fsId = fs.fileSystemId;
- const region = cdk.Stack.of(this).region;
-
- return `${fsId}.efs.${region}.amazonaws.com:/`;
- }
-
- private addVMExportPolicy(): iam.PolicyStatement {
- return new iam.PolicyStatement({
- actions: [
- 'ec2:CreateImage',
- 'ec2:CreateTags',
- 'ec2:DescribeImages',
- 'ec2:DescribeSnapshots',
- 'ec2:DescribeImportSnapshotTasks',
- 'ec2:DescribeTags',
- 'ec2:CancelImportTask',
- ],
- resources: ['*'],
- });
- }
-
- private addAMIS3BackupPolicy(artifactBucketArn: string): iam.PolicyStatement {
- return new iam.PolicyStatement({
- actions: [
- 's3:GetObject',
- 's3:ListBucket',
- 's3:PutObject',
- 's3:PutObjectTagging',
- 's3:AbortMultipartUpload',
- ],
- resources: [artifactBucketArn, `${artifactBucketArn}/*`],
- });
- }
- private addAMIEBSBackupPolicy(region: string): iam.PolicyStatement {
- return new iam.PolicyStatement({
- actions: [
- 'ebs:CompleteSnapshot',
- 'ebs:GetSnapshotBlock',
- 'ebs:ListChangedBlocks',
- 'ebs:ListSnapshotBlocks',
- 'ebs:PutSnapshotBlock',
- ],
- resources: [`arn:aws:ec2:${region}::snapshot/*`],
- });
- }
-
- private addAMIBackupPolicy(): iam.PolicyStatement {
- return new iam.PolicyStatement({
- actions: ['ec2:DescribeStoreImageTasks', 'ec2:GetEbsEncryptionByDefault'],
- resources: ['*'],
- });
- }
-
- private addAMIEC2EBSBackupPolicy(region: string): iam.PolicyStatement {
- return new iam.PolicyStatement({
- actions: [
- 'ec2:RegisterImage',
- 'ec2:DeregisterImage',
- 'ec2:CreateStoreImageTask',
- ],
- resources: [
- `arn:aws:ec2:${region}::image/*`,
- `arn:aws:ec2:${region}::snapshot/snap-*`,
- ],
- });
- }
-}
diff --git a/lib/index.ts b/lib/index.ts
index 55721df..e897a4a 100644
--- a/lib/index.ts
+++ b/lib/index.ts
@@ -1,7 +1,41 @@
-export * from './network';
-export * from './build-image-data';
-export * from './build-image-repo';
-export * from './build-image-pipeline';
-export * from './embedded-linux-pipeline';
-export * from './embedded-linux-codebuild-project';
-export * from './constructs/source-repo';
+import * as s3 from "aws-cdk-lib/aws-s3";
+
+export * from "./codebuild-embedded-linux";
+export * from "./codepipeline-embedded-linux-base-image";
+export * from "./codepipeline-embedded-linux";
+export * from "./codepipeline-resources";
+
+export function isBucketVersioned(bucket: s3.Bucket | s3.IBucket) {
+ const bucketCfn: s3.CfnBucket = bucket.node.defaultChild as s3.CfnBucket;
+ if (
+ bucketCfn.versioningConfiguration &&
+ (
+ bucketCfn.versioningConfiguration as s3.CfnBucket.VersioningConfigurationProperty
+ ).status != "Enabled"
+ ) {
+ return true;
+ }
+ return false;
+}
+
+/**
+ * The type of project built.
+ */
+export enum ProjectType {
+ /** Build core-image-minimal from poky. */
+ Poky = "poky",
+ /** Build the Qemu meta-aws Demonstration Distribution. */
+ QEmu = "qemu",
+ /** Build an EC2 AMI */
+ PokyAmi = "poky-ami",
+ /** Build an kas based image */
+ Kas = "kas",
+ /** Build an Renesas image */
+ Renesas = "renesas",
+ /** Build an IMX image using NXP layers. */
+ NxpImx = "nxp-imx",
+ /** Build no pipeline, just CodeBuild project to connect with GitHub actions. */
+ CodeBuild = "codebuild",
+ /** Build an image using a custom buildspec and asstes. */
+ Custom = "custom",
+}
diff --git a/lib/network.ts b/lib/network.ts
deleted file mode 100644
index 75b8c4f..0000000
--- a/lib/network.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Construct } from 'constructs';
-import * as ec2 from 'aws-cdk-lib/aws-ec2';
-import { LogGroup, RetentionDays } from 'aws-cdk-lib/aws-logs';
-
-/**
- * The network resources to run the pipeline in.
- *
- * This stack is provided for when users do not have an existing VPC with
- * private and public subnets for the pipeline.
- */
-export class PipelineNetworkStack extends cdk.Stack {
- /** The VPC for the pipeline to reside in. */
- public readonly vpc: ec2.IVpc;
- constructor(scope: Construct, id: string, props?: cdk.StackProps) {
- super(scope, id, props);
-
- // We will create a VPC with 3 Private and Public subnets for AWS
- // Resources that have network interfaces (e.g. Connecting and EFS
- // Filesystem to a CodeBuild Project).
- this.vpc = new ec2.Vpc(this, 'PipelineVpc', {
- ipAddresses: ec2.IpAddresses.cidr('10.0.0.0/16'),
- });
-
- new ec2.FlowLog(this, 'VPCFlowLogs', {
- resourceType: ec2.FlowLogResourceType.fromVpc(this.vpc),
- destination: ec2.FlowLogDestination.toCloudWatchLogs(
- new LogGroup(this, 'LogGroup', {
- retention: RetentionDays.TEN_YEARS,
- })
- ),
- });
- }
-}
diff --git a/lib/vm-import-bucket.ts b/lib/vm-import-bucket.ts
deleted file mode 100644
index d20ab34..0000000
--- a/lib/vm-import-bucket.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { Construct } from 'constructs';
-import * as s3 from 'aws-cdk-lib/aws-s3';
-import * as iam from 'aws-cdk-lib/aws-iam';
-
-const TAG = 'aws4embeddedlinux-ci';
-
-export interface VMImportBucketProps extends s3.BucketProps {
- /** The sanitized role name */
- readonly sanitizedRoleName?: string;
- readonly encryptionKeyArn: string;
-}
-
-/**
- * An S3 Bucket with roles for the VM Import/Export service.
- */
-export class VMImportBucket extends s3.Bucket {
- public readonly roleName: string;
- constructor(scope: Construct, id: string, props: VMImportBucketProps) {
- super(scope, id, {
- ...props,
- });
-
- // Adapted from meta-aws-ewaol and
- // https://docs.aws.amazon.com/vm-import/latest/userguide/required-permissions.html
- const importPolicy = new iam.PolicyDocument({
- statements: [
- new iam.PolicyStatement({
- actions: ['s3:GetBucketLocation', 's3:GetObject', 's3:ListBucket'],
- resources: [this.bucketArn, `${this.bucketArn}/*`],
- }),
- new iam.PolicyStatement({
- actions: ['ec2:CreateTags', 'ec2:DescribeTags'],
- resources: ['*'],
- conditions: {
- StringEquals: {
- 'ec2:ResourceTag/CreatedBy': [TAG],
- },
- },
- }),
- new iam.PolicyStatement({
- actions: ['ec2:CopySnapshot'],
- resources: [`arn:aws:ec2:${this.stack.region}::snapshot/*`],
- }),
- new iam.PolicyStatement({
- actions: ['ec2:DescribeSnapshots'],
- resources: ['*'],
- }),
- new iam.PolicyStatement({
- actions: [
- 'kms:CreateGrant',
- 'kms:Decrypt',
- 'kms:DescribeKey',
- 'kms:GenerateDataKeyWithoutPlaintext',
- ],
- resources: [props.encryptionKeyArn],
- }),
- ],
- });
-
- const importRole = new iam.Role(scope, 'VMImportRole', {
- roleName: props.sanitizedRoleName,
- assumedBy: new iam.ServicePrincipal('vmie.amazonaws.com'),
- externalIds: ['vmimport'],
- inlinePolicies: { importPolicy },
- });
-
- this.roleName = importRole.roleName;
- }
-}
diff --git a/package-lock.json b/package-lock.json
index 26bac3c..f52d61d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,18 @@
{
"name": "aws4embeddedlinux-cdk-lib",
- "version": "0.1.4",
+ "version": "0.2.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "aws4embeddedlinux-cdk-lib",
- "version": "0.1.4",
+ "version": "0.2.0",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "aws-cdk-lib": "2.176.0",
+ "constructs": "^10.4.2"
+ },
"devDependencies": {
"@eslint/compat": "^1.2.4",
"@eslint/eslintrc": "^3.2.0",
@@ -15,9 +21,8 @@
"@types/node": "20.14.8",
"@typescript-eslint/eslint-plugin": "^8.18.0",
"@typescript-eslint/parser": "^8.18.0",
- "aws-cdk-lib": "^2.177.0",
- "cdk-nag": "^2.34.23",
- "constructs": "^10.4.2",
+ "aws-cdk": "2.176.0",
+ "cdk-nag": "^2.35.0",
"eslint": "^9.16.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.2.1",
@@ -30,16 +35,10 @@
"typedoc": "^0.27.4",
"typescript": "~5.7.2",
"typescript-eslint": "^8.18.0"
- },
- "peerDependencies": {
- "aws-cdk-lib": "^2.177.0",
- "constructs": "^10.4.2"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -51,66 +50,31 @@
}
},
"node_modules/@aws-cdk/asset-awscli-v1": {
- "version": "2.2.214",
- "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.214.tgz",
- "integrity": "sha512-JeuX1xoYWXEeFD4RyAyvv8OD/NPdbLD6leKKpFLECWqsKY1YrwX0U8lr753CskflwaDGpU42pyyjPdiMZ7NiWA==",
- "dev": true,
+ "version": "2.2.224",
"license": "Apache-2.0"
},
"node_modules/@aws-cdk/asset-kubectl-v20": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz",
- "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==",
- "dev": true,
+ "version": "2.1.4",
"license": "Apache-2.0"
},
"node_modules/@aws-cdk/asset-node-proxy-agent-v6": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz",
- "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==",
- "dev": true,
"license": "Apache-2.0"
},
"node_modules/@aws-cdk/cloud-assembly-schema": {
- "version": "39.2.2",
- "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-39.2.2.tgz",
- "integrity": "sha512-w6OTPy/WI4nyXDRjfuyXeHYJVkRkdam95fc4gf4Xk7O/sFey62BoxFS+HWLlET64FJzTgZAluIQrQAtxPyiS4g==",
+ "version": "39.2.20",
"bundleDependencies": [
"jsonschema",
"semver"
],
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"jsonschema": "~1.4.1",
- "semver": "^7.6.3"
- }
- },
- "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": {
- "version": "1.4.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": {
- "version": "7.6.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
+ "semver": "^7.7.1"
}
},
"node_modules/@babel/code-frame": {
"version": "7.26.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
- "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -123,9 +87,7 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz",
- "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==",
+ "version": "7.26.8",
"dev": true,
"license": "MIT",
"engines": {
@@ -133,22 +95,20 @@
}
},
"node_modules/@babel/core": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
- "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
+ "version": "7.26.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.26.0",
- "@babel/generator": "^7.26.0",
- "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.9",
+ "@babel/helper-compilation-targets": "^7.26.5",
"@babel/helper-module-transforms": "^7.26.0",
- "@babel/helpers": "^7.26.0",
- "@babel/parser": "^7.26.0",
- "@babel/template": "^7.25.9",
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.26.0",
+ "@babel/helpers": "^7.26.9",
+ "@babel/parser": "^7.26.9",
+ "@babel/template": "^7.26.9",
+ "@babel/traverse": "^7.26.9",
+ "@babel/types": "^7.26.9",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -165,8 +125,6 @@
},
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -174,14 +132,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
- "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
+ "version": "7.26.9",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.26.3",
- "@babel/types": "^7.26.3",
+ "@babel/parser": "^7.26.9",
+ "@babel/types": "^7.26.9",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@@ -191,13 +147,11 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
- "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+ "version": "7.26.5",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.25.9",
+ "@babel/compat-data": "^7.26.5",
"@babel/helper-validator-option": "^7.25.9",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
@@ -209,8 +163,6 @@
},
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -219,8 +171,6 @@
},
"node_modules/@babel/helper-module-imports": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
- "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -233,8 +183,6 @@
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
- "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -250,9 +198,7 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
- "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
+ "version": "7.26.5",
"dev": true,
"license": "MIT",
"engines": {
@@ -261,8 +207,6 @@
},
"node_modules/@babel/helper-string-parser": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -271,8 +215,6 @@
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -281,8 +223,6 @@
},
"node_modules/@babel/helper-validator-option": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
- "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -290,27 +230,23 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
- "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
+ "version": "7.26.9",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.26.0"
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
- "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
+ "version": "7.26.9",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.3"
+ "@babel/types": "^7.26.9"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -321,8 +257,6 @@
},
"node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -334,8 +268,6 @@
},
"node_modules/@babel/plugin-syntax-bigint": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -347,8 +279,6 @@
},
"node_modules/@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -360,8 +290,6 @@
},
"node_modules/@babel/plugin-syntax-class-static-block": {
"version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -376,8 +304,6 @@
},
"node_modules/@babel/plugin-syntax-import-attributes": {
"version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
- "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -392,8 +318,6 @@
},
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -405,8 +329,6 @@
},
"node_modules/@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -418,8 +340,6 @@
},
"node_modules/@babel/plugin-syntax-jsx": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
- "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -434,8 +354,6 @@
},
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -447,8 +365,6 @@
},
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -460,8 +376,6 @@
},
"node_modules/@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -473,8 +387,6 @@
},
"node_modules/@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -486,8 +398,6 @@
},
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -499,8 +409,6 @@
},
"node_modules/@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -512,8 +420,6 @@
},
"node_modules/@babel/plugin-syntax-private-property-in-object": {
"version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -528,8 +434,6 @@
},
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -544,8 +448,6 @@
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
- "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -559,32 +461,28 @@
}
},
"node_modules/@babel/template": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
- "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
+ "version": "7.26.9",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.25.9",
- "@babel/parser": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.26.9",
+ "@babel/types": "^7.26.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.26.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz",
- "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
+ "version": "7.26.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.3",
- "@babel/parser": "^7.26.3",
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.26.3",
+ "@babel/generator": "^7.26.9",
+ "@babel/parser": "^7.26.9",
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.9",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -594,8 +492,6 @@
},
"node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -603,9 +499,7 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
+ "version": "7.26.9",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -616,17 +510,17 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@balena/dockerignore": {
+ "version": "1.0.2",
+ "license": "Apache-2.0"
+ },
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true,
"license": "MIT"
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -638,8 +532,6 @@
},
"node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -649,8 +541,6 @@
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
- "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -666,10 +556,19 @@
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/@eslint-community/regexpp": {
"version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -677,9 +576,7 @@
}
},
"node_modules/@eslint/compat": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.4.tgz",
- "integrity": "sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==",
+ "version": "1.2.6",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -695,13 +592,11 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz",
- "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==",
+ "version": "0.19.2",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^2.1.5",
+ "@eslint/object-schema": "^2.1.6",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@@ -709,34 +604,8 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@eslint/config-array/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@eslint/config-array/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/@eslint/core": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz",
- "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==",
+ "version": "0.11.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -748,8 +617,6 @@
},
"node_modules/@eslint/eslintrc": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
- "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -770,21 +637,8 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -794,23 +648,8 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@eslint/eslintrc/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/@eslint/js": {
- "version": "9.16.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz",
- "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==",
+ "version": "9.20.0",
"dev": true,
"license": "MIT",
"engines": {
@@ -818,9 +657,7 @@
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz",
- "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==",
+ "version": "2.1.6",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -828,12 +665,11 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz",
- "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==",
+ "version": "0.2.6",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
+ "@eslint/core": "^0.11.0",
"levn": "^0.4.1"
},
"engines": {
@@ -841,21 +677,17 @@
}
},
"node_modules/@gerrit0/mini-shiki": {
- "version": "1.24.3",
- "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.24.3.tgz",
- "integrity": "sha512-odxt2MTJvlT5NUmGOPXz5OW4D8SFL2+KeXBkmjVtdOXfA5aRZX6jgP/17jp6wu2r3KdW0wx3Bk5HDehgeV1Yng==",
+ "version": "1.27.2",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/engine-oniguruma": "^1.24.2",
- "@shikijs/types": "^1.24.2",
- "@shikijs/vscode-textmate": "^9.3.0"
+ "@shikijs/engine-oniguruma": "^1.27.2",
+ "@shikijs/types": "^1.27.2",
+ "@shikijs/vscode-textmate": "^10.0.1"
}
},
"node_modules/@humanfs/core": {
"version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
- "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -864,8 +696,6 @@
},
"node_modules/@humanfs/node": {
"version": "0.16.6",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
- "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -876,24 +706,8 @@
"node": ">=18.18.0"
}
},
- "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
- "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -905,9 +719,7 @@
}
},
"node_modules/@humanwhocodes/retry": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
- "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
+ "version": "0.3.1",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -920,8 +732,6 @@
},
"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",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -937,32 +747,14 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
"version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
- "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
"version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -973,62 +765,8 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1037,8 +775,6 @@
},
"node_modules/@jest/console": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
- "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1053,10 +789,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/@jest/console/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/@jest/core": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
- "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1101,10 +843,60 @@
}
}
},
+ "node_modules/@jest/core/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
+ "node_modules/@jest/core/node_modules/jest-config": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@jest/environment": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
- "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1117,10 +909,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/@jest/environment/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/@jest/expect": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1133,8 +931,6 @@
},
"node_modules/@jest/expect-utils": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
- "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1146,8 +942,6 @@
},
"node_modules/@jest/fake-timers": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
- "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1162,10 +956,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/@jest/fake-timers/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/@jest/globals": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
- "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1180,8 +980,6 @@
},
"node_modules/@jest/reporters": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
- "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1222,10 +1020,31 @@
}
}
},
+ "node_modules/@jest/reporters/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@jest/schemas": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1237,8 +1056,6 @@
},
"node_modules/@jest/source-map": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
- "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1252,8 +1069,6 @@
},
"node_modules/@jest/test-result": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
- "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1268,8 +1083,6 @@
},
"node_modules/@jest/test-sequencer": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
- "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1284,8 +1097,6 @@
},
"node_modules/@jest/transform": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
- "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1311,8 +1122,6 @@
},
"node_modules/@jest/types": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1327,10 +1136,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/@jest/types/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
- "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1344,8 +1159,6 @@
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1354,8 +1167,6 @@
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1364,15 +1175,11 @@
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1382,15 +1189,11 @@
},
"node_modules/@microsoft/tsdoc": {
"version": "0.15.1",
- "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz",
- "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==",
"dev": true,
"license": "MIT"
},
"node_modules/@microsoft/tsdoc-config": {
"version": "0.17.1",
- "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz",
- "integrity": "sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1402,8 +1205,6 @@
},
"node_modules/@microsoft/tsdoc-config/node_modules/ajv": {
"version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1417,17 +1218,8 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1440,8 +1232,6 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1450,8 +1240,6 @@
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1464,8 +1252,6 @@
},
"node_modules/@pkgr/core": {
"version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
- "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1476,45 +1262,35 @@
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "1.24.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.2.tgz",
- "integrity": "sha512-ZN6k//aDNWRJs1uKB12pturKHh7GejKugowOFGAuG7TxDRLod1Bd5JhpOikOiFqPmKjKEPtEA6mRCf7q3ulDyQ==",
+ "version": "1.29.2",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/types": "1.24.2",
- "@shikijs/vscode-textmate": "^9.3.0"
+ "@shikijs/types": "1.29.2",
+ "@shikijs/vscode-textmate": "^10.0.1"
}
},
"node_modules/@shikijs/types": {
- "version": "1.24.2",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.24.2.tgz",
- "integrity": "sha512-bdeWZiDtajGLG9BudI0AHet0b6e7FbR0EsE4jpGaI0YwHm/XJunI9+3uZnzFtX65gsyJ6ngCIWUfA4NWRPnBkQ==",
+ "version": "1.29.2",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shikijs/vscode-textmate": "^9.3.0",
+ "@shikijs/vscode-textmate": "^10.0.1",
"@types/hast": "^3.0.4"
}
},
"node_modules/@shikijs/vscode-textmate": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.1.tgz",
- "integrity": "sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==",
+ "version": "10.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
"dev": true,
"license": "MIT"
},
"node_modules/@sinonjs/commons": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -1523,8 +1299,6 @@
},
"node_modules/@sinonjs/fake-timers": {
"version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -1533,36 +1307,26 @@
},
"node_modules/@tsconfig/node10": {
"version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
- "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
- "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
- "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node16": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
- "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
- "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1575,8 +1339,6 @@
},
"node_modules/@types/babel__generator": {
"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,
"license": "MIT",
"dependencies": {
@@ -1585,8 +1347,6 @@
},
"node_modules/@types/babel__template": {
"version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
- "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1596,8 +1356,6 @@
},
"node_modules/@types/babel__traverse": {
"version": "7.20.6",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
- "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1606,25 +1364,27 @@
},
"node_modules/@types/estree": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/graceful-fs": {
"version": "4.1.9",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
- "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
+ "node_modules/@types/graceful-fs/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/@types/hast": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1633,15 +1393,11 @@
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
- "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
- "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1650,8 +1406,6 @@
},
"node_modules/@types/istanbul-reports": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
- "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1660,8 +1414,6 @@
},
"node_modules/@types/jest": {
"version": "29.5.14",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
- "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1671,39 +1423,34 @@
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "20.14.8",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz",
- "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
}
},
- "node_modules/@types/stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
+ "node_modules/@types/node/node_modules/undici-types": {
+ "version": "5.26.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
"dev": true,
"license": "MIT"
},
"node_modules/@types/unist": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/yargs": {
"version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1712,27 +1459,23 @@
},
"node_modules/@types/yargs-parser": {
"version": "21.0.3",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
- "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz",
- "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.18.0",
- "@typescript-eslint/type-utils": "8.18.0",
- "@typescript-eslint/utils": "8.18.0",
- "@typescript-eslint/visitor-keys": "8.18.0",
+ "@typescript-eslint/scope-manager": "8.24.1",
+ "@typescript-eslint/type-utils": "8.24.1",
+ "@typescript-eslint/utils": "8.24.1",
+ "@typescript-eslint/visitor-keys": "8.24.1",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1748,16 +1491,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz",
- "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==",
+ "version": "8.24.1",
"dev": true,
- "license": "MITClause",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.18.0",
- "@typescript-eslint/types": "8.18.0",
- "@typescript-eslint/typescript-estree": "8.18.0",
- "@typescript-eslint/visitor-keys": "8.18.0",
+ "@typescript-eslint/scope-manager": "8.24.1",
+ "@typescript-eslint/types": "8.24.1",
+ "@typescript-eslint/typescript-estree": "8.24.1",
+ "@typescript-eslint/visitor-keys": "8.24.1",
"debug": "^4.3.4"
},
"engines": {
@@ -1773,14 +1514,12 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz",
- "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.18.0",
- "@typescript-eslint/visitor-keys": "8.18.0"
+ "@typescript-eslint/types": "8.24.1",
+ "@typescript-eslint/visitor-keys": "8.24.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1791,16 +1530,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz",
- "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.18.0",
- "@typescript-eslint/utils": "8.18.0",
+ "@typescript-eslint/typescript-estree": "8.24.1",
+ "@typescript-eslint/utils": "8.24.1",
"debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1815,9 +1552,7 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz",
- "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"engines": {
@@ -1829,20 +1564,18 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz",
- "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.18.0",
- "@typescript-eslint/visitor-keys": "8.18.0",
+ "@typescript-eslint/types": "8.24.1",
+ "@typescript-eslint/visitor-keys": "8.24.1",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
"minimatch": "^9.0.4",
"semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1855,17 +1588,29 @@
"typescript": ">=4.8.4 <5.8.0"
}
},
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "dev": true,
+ "license": "ISC",
+ "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": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz",
- "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.18.0",
- "@typescript-eslint/types": "8.18.0",
- "@typescript-eslint/typescript-estree": "8.18.0"
+ "@typescript-eslint/scope-manager": "8.24.1",
+ "@typescript-eslint/types": "8.24.1",
+ "@typescript-eslint/typescript-estree": "8.24.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1880,13 +1625,11 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz",
- "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.18.0",
+ "@typescript-eslint/types": "8.24.1",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@@ -1897,23 +1640,8 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
"node_modules/acorn": {
"version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true,
"license": "MIT",
"bin": {
@@ -1925,8 +1653,6 @@
},
"node_modules/acorn-jsx": {
"version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -1935,8 +1661,6 @@
},
"node_modules/acorn-walk": {
"version": "8.3.4",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
- "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1948,8 +1672,6 @@
},
"node_modules/ajv": {
"version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1963,10 +1685,13 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/ansi-escapes": {
"version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1981,9 +1706,6 @@
},
"node_modules/ansi-regex": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -1991,9 +1713,6 @@
},
"node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -2007,8 +1726,6 @@
},
"node_modules/anymatch": {
"version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2021,29 +1738,42 @@
},
"node_modules/arg": {
"version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true,
"license": "MIT"
},
"node_modules/argparse": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
"license": "Python-2.0"
},
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/async": {
"version": "3.2.6",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
- "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"dev": true,
"license": "MIT"
},
+ "node_modules/aws-cdk": {
+ "version": "2.176.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "cdk": "bin/cdk"
+ },
+ "engines": {
+ "node": ">= 14.15.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
"node_modules/aws-cdk-lib": {
- "version": "2.177.0",
- "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.177.0.tgz",
- "integrity": "sha512-nTnHAwjZaPJ5gfJjtzE/MyK6q0a66nWthoJl7l8srucRb+I30dczhbbXor6QCdVpJaTRAEliMOMq23aglsAQbg==",
+ "version": "2.176.0",
"bundleDependencies": [
"@balena/dockerignore",
"case",
@@ -2057,13 +1787,12 @@
"yaml",
"mime-types"
],
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-cdk/asset-awscli-v1": "^2.2.208",
"@aws-cdk/asset-kubectl-v20": "^2.1.3",
"@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0",
- "@aws-cdk/cloud-assembly-schema": "^39.2.0",
+ "@aws-cdk/cloud-assembly-schema": "^39.0.1",
"@balena/dockerignore": "^1.0.2",
"case": "1.6.3",
"fs-extra": "^11.2.0",
@@ -2077,349 +1806,22 @@
"yaml": "1.10.2"
},
"engines": {
- "node": ">= 14.15.0"
- },
- "peerDependencies": {
- "constructs": "^10.0.0"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0"
- },
- "node_modules/aws-cdk-lib/node_modules/ajv": {
- "version": "8.17.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/ansi-regex": {
- "version": "5.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/astral-regex": {
- "version": "2.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/balanced-match": {
- "version": "1.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/aws-cdk-lib/node_modules/brace-expansion": {
- "version": "1.1.11",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/case": {
- "version": "1.6.3",
- "dev": true,
- "inBundle": true,
- "license": "(MIT OR GPL-3.0-or-later)",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/color-convert": {
- "version": "2.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/color-name": {
- "version": "1.1.4",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/aws-cdk-lib/node_modules/concat-map": {
- "version": "0.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/aws-cdk-lib/node_modules/emoji-regex": {
- "version": "8.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/aws-cdk-lib/node_modules/fast-uri": {
- "version": "3.0.3",
- "dev": true,
- "inBundle": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/aws-cdk-lib/node_modules/fs-extra": {
- "version": "11.2.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/graceful-fs": {
- "version": "4.2.11",
- "dev": true,
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/aws-cdk-lib/node_modules/ignore": {
- "version": "5.3.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/aws-cdk-lib/node_modules/jsonfile": {
- "version": "6.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/jsonschema": {
- "version": "1.4.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/lodash.truncate": {
- "version": "4.4.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/aws-cdk-lib/node_modules/mime-db": {
- "version": "1.52.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/mime-types": {
- "version": "2.1.35",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/minimatch": {
- "version": "3.1.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/punycode": {
- "version": "2.3.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/require-from-string": {
- "version": "2.0.2",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/semver": {
- "version": "7.6.3",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/slice-ansi": {
- "version": "4.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/string-width": {
- "version": "4.2.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/strip-ansi": {
- "version": "6.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/table": {
- "version": "6.8.2",
- "dev": true,
- "inBundle": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "ajv": "^8.0.1",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
+ "node": ">= 14.15.0"
},
- "engines": {
- "node": ">=10.0.0"
+ "peerDependencies": {
+ "constructs": "^10.0.0"
}
},
- "node_modules/aws-cdk-lib/node_modules/universalify": {
- "version": "2.0.1",
- "dev": true,
+ "node_modules/aws-cdk-lib/node_modules/jsonschema": {
+ "version": "1.5.0",
"inBundle": true,
"license": "MIT",
"engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/aws-cdk-lib/node_modules/yaml": {
- "version": "1.10.2",
- "dev": true,
- "inBundle": true,
- "license": "ISC",
- "engines": {
- "node": ">= 6"
+ "node": "*"
}
},
"node_modules/babel-jest": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
- "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2440,8 +1842,6 @@
},
"node_modules/babel-plugin-istanbul": {
"version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -2455,37 +1855,8 @@
"node": ">=8"
}
},
- "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-istanbul/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/babel-plugin-jest-hoist": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
- "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2500,8 +1871,6 @@
},
"node_modules/babel-preset-current-node-syntax": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
- "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2527,8 +1896,6 @@
},
"node_modules/babel-preset-jest": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
- "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2544,15 +1911,10 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
"license": "MIT"
},
"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,
"license": "MIT",
"dependencies": {
@@ -2561,8 +1923,6 @@
},
"node_modules/braces": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2573,9 +1933,7 @@
}
},
"node_modules/browserslist": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
- "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
+ "version": "4.24.4",
"dev": true,
"funding": [
{
@@ -2593,9 +1951,9 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001669",
- "electron-to-chromium": "^1.5.41",
- "node-releases": "^2.0.18",
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.1"
},
"bin": {
@@ -2607,8 +1965,6 @@
},
"node_modules/bs-logger": {
"version": "0.2.6",
- "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
- "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2620,8 +1976,6 @@
},
"node_modules/bser": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -2630,15 +1984,11 @@
},
"node_modules/buffer-from": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true,
"license": "MIT"
},
"node_modules/callsites": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2647,8 +1997,6 @@
},
"node_modules/camelcase": {
"version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2656,9 +2004,7 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001688",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz",
- "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==",
+ "version": "1.0.30001700",
"dev": true,
"funding": [
{
@@ -2676,10 +2022,15 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/case": {
+ "version": "1.6.3",
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/cdk-nag": {
- "version": "2.34.23",
- "resolved": "https://registry.npmjs.org/cdk-nag/-/cdk-nag-2.34.23.tgz",
- "integrity": "sha512-TCvQy5uCk1QHek7UhbmFh4Uk2HveXyuQ6jfUC0ZfW5HgAMhv8+6lTY56Jq09/rm0csKDzWnMpGGAXjgLW6rg0A==",
+ "version": "2.35.24",
"dev": true,
"license": "Apache-2.0",
"peerDependencies": {
@@ -2689,8 +2040,6 @@
},
"node_modules/chalk": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2706,8 +2055,6 @@
},
"node_modules/char-regex": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2716,8 +2063,6 @@
},
"node_modules/ci-info": {
"version": "3.9.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
- "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
"dev": true,
"funding": [
{
@@ -2731,16 +2076,12 @@
}
},
"node_modules/cjs-module-lexer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz",
- "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==",
+ "version": "1.4.3",
"dev": true,
"license": "MIT"
},
"node_modules/cliui": {
"version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2754,8 +2095,6 @@
},
"node_modules/co": {
"version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2765,16 +2104,11 @@
},
"node_modules/collect-v8-coverage": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
- "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
"dev": true,
"license": "MIT"
},
"node_modules/color-convert": {
"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,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -2785,36 +2119,23 @@
},
"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,
"license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
"license": "MIT"
},
"node_modules/constructs": {
"version": "10.4.2",
- "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.4.2.tgz",
- "integrity": "sha512-wsNxBlAott2qg8Zv87q3eYZYgheb9lchtBfjHzzLHtXbttwSrHPs1NNQbBrmbb1YZvYg2+Vh0Dor76w4mFxJkA==",
- "dev": true,
"license": "Apache-2.0"
},
"node_modules/convert-source-map": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true,
"license": "MIT"
},
"node_modules/create-jest": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
- "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2835,15 +2156,11 @@
},
"node_modules/create-require": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true,
"license": "MIT"
},
"node_modules/cross-spawn": {
"version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2857,8 +2174,6 @@
},
"node_modules/debug": {
"version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2875,8 +2190,6 @@
},
"node_modules/dedent": {
"version": "1.5.3",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
- "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -2890,15 +2203,11 @@
},
"node_modules/deep-is": {
"version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true,
"license": "MIT"
},
"node_modules/deepmerge": {
"version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2907,8 +2216,6 @@
},
"node_modules/detect-newline": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2917,8 +2224,6 @@
},
"node_modules/diff": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -2927,8 +2232,6 @@
},
"node_modules/diff-sequences": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
- "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2937,8 +2240,6 @@
},
"node_modules/ejs": {
"version": "3.1.10",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
- "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -2952,16 +2253,12 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.73",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz",
- "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==",
+ "version": "1.5.102",
"dev": true,
"license": "ISC"
},
"node_modules/emittery": {
"version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2973,15 +2270,10 @@
},
"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,
"license": "MIT"
},
"node_modules/entities": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -2993,8 +2285,6 @@
},
"node_modules/error-ex": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3003,8 +2293,6 @@
},
"node_modules/escalade": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3012,32 +2300,25 @@
}
},
"node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/eslint": {
- "version": "9.16.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz",
- "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==",
+ "version": "9.20.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.19.0",
- "@eslint/core": "^0.9.0",
+ "@eslint/core": "^0.11.0",
"@eslint/eslintrc": "^3.2.0",
- "@eslint/js": "9.16.0",
- "@eslint/plugin-kit": "^0.2.3",
+ "@eslint/js": "9.20.0",
+ "@eslint/plugin-kit": "^0.2.5",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.1",
@@ -3045,7 +2326,7 @@
"@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
- "cross-spawn": "^7.0.5",
+ "cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^8.2.0",
@@ -3086,8 +2367,6 @@
},
"node_modules/eslint-config-prettier": {
"version": "9.1.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
- "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
"dev": true,
"license": "MIT",
"bin": {
@@ -3098,9 +2377,7 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
- "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==",
+ "version": "5.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3130,8 +2407,6 @@
},
"node_modules/eslint-plugin-tsdoc": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.4.0.tgz",
- "integrity": "sha512-MT/8b4aKLdDClnS8mP3R/JNjg29i0Oyqd/0ym6NnQf+gfKbJJ4ZcSh2Bs1H0YiUMTBwww5JwXGTWot/RwyJ7aQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3141,8 +2416,6 @@
},
"node_modules/eslint-scope": {
"version": "8.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
- "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -3157,59 +2430,67 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "version": "4.2.0",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "node_modules/eslint/node_modules/@humanwhocodes/retry": {
+ "version": "0.4.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
"dev": true,
"license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=10"
},
"funding": {
- "url": "https://opencollective.com/eslint"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "is-glob": "^4.0.3"
},
"engines": {
- "node": "*"
+ "node": ">=10.13.0"
}
},
"node_modules/espree": {
"version": "10.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
- "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -3224,23 +2505,8 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
"node_modules/esprima": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
"license": "BSD-2-Clause",
"bin": {
@@ -3253,8 +2519,6 @@
},
"node_modules/esquery": {
"version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -3266,8 +2530,6 @@
},
"node_modules/esrecurse": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -3279,8 +2541,6 @@
},
"node_modules/estraverse": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -3289,8 +2549,6 @@
},
"node_modules/esutils": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -3299,8 +2557,6 @@
},
"node_modules/execa": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3323,8 +2579,6 @@
},
"node_modules/exit": {
"version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
@@ -3332,8 +2586,6 @@
},
"node_modules/expect": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3349,22 +2601,15 @@
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-diff": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
- "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "version": "3.3.3",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3372,43 +2617,38 @@
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
}
},
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-uri": {
+ "version": "3.0.6",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "version": "1.19.0",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -3417,8 +2657,6 @@
},
"node_modules/fb-watchman": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
- "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -3427,8 +2665,6 @@
},
"node_modules/file-entry-cache": {
"version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3440,8 +2676,6 @@
},
"node_modules/filelist": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
- "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -3450,8 +2684,6 @@
},
"node_modules/filelist/node_modules/minimatch": {
"version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -3463,8 +2695,6 @@
},
"node_modules/fill-range": {
"version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3475,26 +2705,55 @@
}
},
"node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
- "locate-path": "^6.0.0",
+ "locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up/node_modules/locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/find-up/node_modules/p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/flat-cache": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3506,38 +2765,29 @@
}
},
"node_modules/flatted": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
- "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
+ "version": "3.3.3",
"dev": true,
"license": "ISC"
},
+ "node_modules/fs-extra": {
+ "version": "11.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true,
"license": "ISC"
},
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/function-bind": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"license": "MIT",
"funding": {
@@ -3546,8 +2796,6 @@
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3556,8 +2804,6 @@
},
"node_modules/get-caller-file": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"license": "ISC",
"engines": {
@@ -3566,8 +2812,6 @@
},
"node_modules/get-package-type": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3576,8 +2820,6 @@
},
"node_modules/get-stream": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3589,8 +2831,6 @@
},
"node_modules/glob": {
"version": "9.3.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
- "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -3607,22 +2847,18 @@
}
},
"node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "version": "5.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
- "is-glob": "^4.0.3"
+ "is-glob": "^4.0.1"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">= 6"
}
},
"node_modules/glob/node_modules/minimatch": {
"version": "8.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
- "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -3636,9 +2872,7 @@
}
},
"node_modules/globals": {
- "version": "15.13.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz",
- "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==",
+ "version": "15.15.0",
"dev": true,
"license": "MIT",
"engines": {
@@ -3650,22 +2884,15 @@
},
"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==",
- "dev": true,
"license": "ISC"
},
"node_modules/graphemer": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true,
"license": "MIT"
},
"node_modules/has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3674,8 +2901,6 @@
},
"node_modules/hasown": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3687,15 +2912,11 @@
},
"node_modules/html-escaper": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true,
"license": "MIT"
},
"node_modules/human-signals": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -3704,18 +2925,13 @@
},
"node_modules/ignore": {
"version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "version": "3.3.1",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3729,10 +2945,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/import-local": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
- "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3751,8 +2973,6 @@
},
"node_modules/imurmurhash": {
"version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3761,15 +2981,11 @@
},
"node_modules/is-arrayish": {
"version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true,
"license": "MIT"
},
"node_modules/is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "version": "2.16.1",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3784,8 +3000,6 @@
},
"node_modules/is-extglob": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3794,9 +3008,6 @@
},
"node_modules/is-fullwidth-code-point": {
"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,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3804,8 +3015,6 @@
},
"node_modules/is-generator-fn": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3814,8 +3023,6 @@
},
"node_modules/is-glob": {
"version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3827,8 +3034,6 @@
},
"node_modules/is-number": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3837,8 +3042,6 @@
},
"node_modules/is-stream": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3850,15 +3053,11 @@
},
"node_modules/isexe": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true,
"license": "ISC"
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -3866,26 +3065,30 @@
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
- "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
+ "version": "5.2.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@babel/core": "^7.23.9",
- "@babel/parser": "^7.23.9",
- "@istanbuljs/schema": "^0.1.3",
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.2.0",
- "semver": "^7.5.4"
+ "semver": "^6.3.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "6.3.1",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/istanbul-lib-report": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
- "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -3899,8 +3102,6 @@
},
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -3914,8 +3115,6 @@
},
"node_modules/istanbul-reports": {
"version": "3.1.7",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
- "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -3928,8 +3127,6 @@
},
"node_modules/jake": {
"version": "10.9.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
- "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -3945,34 +3142,8 @@
"node": ">=10"
}
},
- "node_modules/jake/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/jake/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/jest": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
- "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3998,8 +3169,6 @@
},
"node_modules/jest-changed-files": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
- "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4013,8 +3182,6 @@
},
"node_modules/jest-circus": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
- "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4043,10 +3210,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-circus/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-cli": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
- "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4079,8 +3252,6 @@
},
"node_modules/jest-config": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
- "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4125,8 +3296,6 @@
},
"node_modules/jest-diff": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
- "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4141,8 +3310,6 @@
},
"node_modules/jest-docblock": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
- "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4154,8 +3321,6 @@
},
"node_modules/jest-each": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
- "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4171,8 +3336,6 @@
},
"node_modules/jest-environment-node": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
- "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4187,10 +3350,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-environment-node/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-get-type": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4199,8 +3368,6 @@
},
"node_modules/jest-haste-map": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
- "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4223,10 +3390,16 @@
"fsevents": "^2.3.2"
}
},
+ "node_modules/jest-haste-map/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-leak-detector": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
- "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4239,8 +3412,6 @@
},
"node_modules/jest-matcher-utils": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
- "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4255,8 +3426,6 @@
},
"node_modules/jest-message-util": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
- "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4276,8 +3445,6 @@
},
"node_modules/jest-mock": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
- "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4289,10 +3456,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-mock/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-pnp-resolver": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4309,8 +3482,6 @@
},
"node_modules/jest-regex-util": {
"version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
- "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4319,8 +3490,6 @@
},
"node_modules/jest-resolve": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
- "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4340,8 +3509,6 @@
},
"node_modules/jest-resolve-dependencies": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
- "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4354,8 +3521,6 @@
},
"node_modules/jest-runner": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
- "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4385,10 +3550,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-runner/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-runtime": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
- "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4419,10 +3590,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-runtime/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-snapshot": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
- "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4453,8 +3630,6 @@
},
"node_modules/jest-util": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
- "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4469,10 +3644,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-util/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-validate": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4489,8 +3670,6 @@
},
"node_modules/jest-validate/node_modules/camelcase": {
"version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4502,8 +3681,6 @@
},
"node_modules/jest-watcher": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
- "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4520,10 +3697,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-watcher/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-worker": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
- "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4536,10 +3719,16 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/jest-worker/node_modules/@types/node": {
+ "version": "22.13.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.20.0"
+ }
+ },
"node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4554,22 +3743,16 @@
},
"node_modules/jju": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
- "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==",
"dev": true,
"license": "MIT"
},
"node_modules/js-tokens": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true,
"license": "MIT"
},
"node_modules/js-yaml": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4581,8 +3764,6 @@
},
"node_modules/jsesc": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
"license": "MIT",
"bin": {
@@ -4594,36 +3775,25 @@
},
"node_modules/json-buffer": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
"license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true,
"license": "MIT"
},
"node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
+ "version": "1.0.0",
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true,
"license": "MIT"
},
"node_modules/json5": {
"version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -4633,10 +3803,25 @@
"node": ">=6"
}
},
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonschema": {
+ "version": "1.4.1",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/keyv": {
"version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4645,8 +3830,6 @@
},
"node_modules/kleur": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4655,8 +3838,6 @@
},
"node_modules/leven": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4665,8 +3846,6 @@
},
"node_modules/levn": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4679,15 +3858,11 @@
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true,
"license": "MIT"
},
"node_modules/linkify-it": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4696,8 +3871,6 @@
},
"node_modules/locate-path": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4712,22 +3885,20 @@
},
"node_modules/lodash.memoize": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true,
"license": "MIT"
},
+ "node_modules/lodash.truncate": {
+ "version": "4.4.2",
+ "license": "MIT"
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -4736,15 +3907,11 @@
},
"node_modules/lunr": {
"version": "2.3.9",
- "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
- "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
"dev": true,
"license": "MIT"
},
"node_modules/make-dir": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4759,15 +3926,11 @@
},
"node_modules/make-error": {
"version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true,
"license": "ISC"
},
"node_modules/makeerror": {
"version": "1.0.12",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
- "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -4776,8 +3939,6 @@
},
"node_modules/markdown-it": {
"version": "14.1.0",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
- "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4794,22 +3955,16 @@
},
"node_modules/mdurl": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
"dev": true,
"license": "MIT"
},
"node_modules/merge-stream": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true,
"license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4818,8 +3973,6 @@
},
"node_modules/micromatch": {
"version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4830,10 +3983,25 @@
"node": ">=8.6"
}
},
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/mimic-fn": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4841,25 +4009,25 @@
}
},
"node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
+ "version": "3.1.2",
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": "*"
+ }
+ },
+ "node_modules/minimatch/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/minipass": {
"version": "4.2.8",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
- "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
"dev": true,
"license": "ISC",
"engines": {
@@ -4868,36 +4036,26 @@
},
"node_modules/ms": {
"version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"node_modules/natural-compare": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true,
"license": "MIT"
},
"node_modules/node-int64": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true,
"license": "MIT"
},
"node_modules/node-releases": {
"version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
"dev": true,
"license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4906,8 +4064,6 @@
},
"node_modules/npm-run-path": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4919,8 +4075,6 @@
},
"node_modules/onetime": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4935,8 +4089,6 @@
},
"node_modules/optionator": {
"version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4953,8 +4105,6 @@
},
"node_modules/p-limit": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4969,8 +4119,6 @@
},
"node_modules/p-locate": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4985,8 +4133,6 @@
},
"node_modules/p-try": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4995,8 +4141,6 @@
},
"node_modules/parent-module": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5008,8 +4152,6 @@
},
"node_modules/parse-json": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5027,8 +4169,6 @@
},
"node_modules/path-exists": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5037,8 +4177,6 @@
},
"node_modules/path-key": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5047,15 +4185,11 @@
},
"node_modules/path-parse": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true,
"license": "MIT"
},
"node_modules/path-scurry": {
"version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -5071,15 +4205,11 @@
},
"node_modules/path-scurry/node_modules/lru-cache": {
"version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true,
"license": "ISC"
},
"node_modules/path-scurry/node_modules/minipass": {
"version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
"license": "ISC",
"engines": {
@@ -5088,15 +4218,11 @@
},
"node_modules/picocolors": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5108,8 +4234,6 @@
},
"node_modules/pirates": {
"version": "4.0.6",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
- "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5118,8 +4242,6 @@
},
"node_modules/pkg-dir": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5129,66 +4251,8 @@
"node": ">=8"
}
},
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/prelude-ls": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5196,9 +4260,7 @@
}
},
"node_modules/prettier": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
- "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
+ "version": "3.5.1",
"dev": true,
"license": "MIT",
"bin": {
@@ -5213,8 +4275,6 @@
},
"node_modules/prettier-linter-helpers": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
- "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5226,8 +4286,6 @@
},
"node_modules/pretty-format": {
"version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5241,8 +4299,6 @@
},
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5254,8 +4310,6 @@
},
"node_modules/prompts": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5268,9 +4322,6 @@
},
"node_modules/punycode": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -5278,8 +4329,6 @@
},
"node_modules/punycode.js": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5288,8 +4337,6 @@
},
"node_modules/pure-rand": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
- "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
"dev": true,
"funding": [
{
@@ -5305,8 +4352,6 @@
},
"node_modules/queue-microtask": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [
{
@@ -5326,15 +4371,11 @@
},
"node_modules/react-is": {
"version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true,
"license": "MIT"
},
"node_modules/require-directory": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5343,36 +4384,32 @@
},
"node_modules/require-from-string": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "version": "1.22.10",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
+ "is-core-module": "^2.16.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5382,30 +4419,16 @@
"node": ">=8"
}
},
- "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "node_modules/resolve-from": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/resolve.exports": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
- "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5414,8 +4437,6 @@
},
"node_modules/reusify": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5425,8 +4446,6 @@
},
"node_modules/run-parallel": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [
{
@@ -5448,10 +4467,7 @@
}
},
"node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
- "dev": true,
+ "version": "7.7.1",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -5462,8 +4478,6 @@
},
"node_modules/shebang-command": {
"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,
"license": "MIT",
"dependencies": {
@@ -5475,8 +4489,6 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5485,32 +4497,39 @@
},
"node_modules/signal-exit": {
"version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true,
"license": "ISC"
},
"node_modules/sisteransi": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"dev": true,
"license": "MIT"
},
"node_modules/slash": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -5519,8 +4538,6 @@
},
"node_modules/source-map-support": {
"version": "0.5.13",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
- "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5530,15 +4547,11 @@
},
"node_modules/sprintf-js": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/stack-utils": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5548,20 +4561,8 @@
"node": ">=10"
}
},
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/string-length": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
- "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5574,9 +4575,6 @@
},
"node_modules/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==",
- "dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -5589,9 +4587,6 @@
},
"node_modules/strip-ansi": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -5602,8 +4597,6 @@
},
"node_modules/strip-bom": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5612,8 +4605,6 @@
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5622,8 +4613,6 @@
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5635,8 +4624,6 @@
},
"node_modules/supports-color": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5648,8 +4635,6 @@
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5661,8 +4646,6 @@
},
"node_modules/synckit": {
"version": "0.9.2",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
- "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5676,56 +4659,54 @@
"url": "https://opencollective.com/unts"
}
},
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "license": "ISC",
+ "node_modules/table": {
+ "version": "6.9.0",
+ "license": "BSD-3-Clause",
"dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=10.0.0"
}
},
- "node_modules/test-exclude/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
+ "node_modules/table/node_modules/ajv": {
+ "version": "8.17.1",
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/test-exclude/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
},
"engines": {
- "node": "*"
+ "node": ">=8"
}
},
"node_modules/tmpl": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5736,22 +4717,18 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
- "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+ "version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=16"
+ "node": ">=18.12"
},
"peerDependencies": {
- "typescript": ">=4.2.0"
+ "typescript": ">=4.8.4"
}
},
"node_modules/ts-jest": {
"version": "29.2.5",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz",
- "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5799,8 +4776,6 @@
},
"node_modules/ts-node": {
"version": "10.9.2",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
- "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5843,15 +4818,11 @@
},
"node_modules/tslib": {
"version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true,
"license": "0BSD"
},
"node_modules/type-check": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5863,8 +4834,6 @@
},
"node_modules/type-detect": {
"version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5873,8 +4842,6 @@
},
"node_modules/type-fest": {
"version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
@@ -5885,9 +4852,7 @@
}
},
"node_modules/typedoc": {
- "version": "0.27.4",
- "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.4.tgz",
- "integrity": "sha512-wXPQs1AYC2Crk+1XFpNuutLIkNWleokZf1UNf/X8w9KsMnirkvT+LzxTXDvfF6ug3TSLf3Xu5ZXRKGfoXPX7IA==",
+ "version": "0.27.7",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -5907,10 +4872,33 @@
"typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x"
}
},
+ "node_modules/typedoc/node_modules/minimatch": {
+ "version": "9.0.5",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/typedoc/node_modules/yaml": {
+ "version": "2.7.0",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/typescript": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
- "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
+ "version": "5.7.3",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -5922,15 +4910,13 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.18.0.tgz",
- "integrity": "sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==",
+ "version": "8.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.18.0",
- "@typescript-eslint/parser": "8.18.0",
- "@typescript-eslint/utils": "8.18.0"
+ "@typescript-eslint/eslint-plugin": "8.24.1",
+ "@typescript-eslint/parser": "8.24.1",
+ "@typescript-eslint/utils": "8.24.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5946,22 +4932,23 @@
},
"node_modules/uc.micro": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
- "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
"dev": true,
"license": "MIT"
},
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "version": "6.20.0",
"dev": true,
"license": "MIT"
},
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
"node_modules/update-browserslist-db": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
- "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+ "version": "1.1.2",
"dev": true,
"funding": [
{
@@ -5980,7 +4967,7 @@
"license": "MIT",
"dependencies": {
"escalade": "^3.2.0",
- "picocolors": "^1.1.0"
+ "picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -5991,8 +4978,6 @@
},
"node_modules/uri-js": {
"version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -6001,15 +4986,11 @@
},
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true,
"license": "MIT"
},
"node_modules/v8-to-istanbul": {
"version": "9.3.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
- "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -6023,8 +5004,6 @@
},
"node_modules/walker": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
- "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -6033,8 +5012,6 @@
},
"node_modules/which": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -6049,8 +5026,6 @@
},
"node_modules/word-wrap": {
"version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6059,8 +5034,6 @@
},
"node_modules/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==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6077,8 +5050,6 @@
},
"node_modules/write-file-atomic": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -6091,8 +5062,6 @@
},
"node_modules/y18n": {
"version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"license": "ISC",
"engines": {
@@ -6101,28 +5070,18 @@
},
"node_modules/yallist": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true,
"license": "ISC"
},
"node_modules/yaml": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
- "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
- "dev": true,
+ "version": "1.10.2",
"license": "ISC",
- "bin": {
- "yaml": "bin.mjs"
- },
"engines": {
- "node": ">= 14"
+ "node": ">= 6"
}
},
"node_modules/yargs": {
"version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6140,8 +5099,6 @@
},
"node_modules/yargs-parser": {
"version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
"license": "ISC",
"engines": {
@@ -6150,8 +5107,6 @@
},
"node_modules/yn": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6160,8 +5115,6 @@
},
"node_modules/yocto-queue": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"license": "MIT",
"engines": {
diff --git a/package.json b/package.json
index f8bca95..bf40894 100644
--- a/package.json
+++ b/package.json
@@ -1,55 +1,60 @@
-{
- "name": "aws4embeddedlinux-cdk-lib",
- "version": "0.1.4",
- "main": "dist/lib/index.js",
- "types": "dist/lib/index.d.ts",
- "scripts": {
- "build": "tsc",
- "copy-src": "if [ -d dist/source-repo ]; then rm -rf dist/source-repo; fi && cp -r source-repo dist && cp assets/create-ec2-ami.sh dist/assets",
- "zip-data": "if [ -f dist/assets/build-image/data.zip ]; then rm -rf dist/assets/build-image; fi && mkdir -p dist/assets/build-image ; cd assets/build-image && zip -q -o ../../dist/assets/build-image/data.zip -r *",
- "clean": "tsc --build --clean && rm -rf dist && rm -rf cdk.out",
- "prebuild": "npm run zip-data && npm run copy-src",
- "watch": "tsc -w",
- "test": "jest",
- "update-snapshot": "jest -u",
- "cdk": "cdk",
- "doc": "typedoc --sort source-order --readme README.md",
- "format": "eslint '**/*.{js,ts,json}' --quiet --fix",
- "check": "eslint '**/*.{js,ts,json}'",
- "prepare": "npm run build"
- },
- "devDependencies": {
- "@eslint/compat": "^1.2.4",
- "@eslint/eslintrc": "^3.2.0",
- "@eslint/js": "^9.16.0",
- "@types/jest": "^29.5.14",
- "@types/node": "20.14.8",
- "@typescript-eslint/eslint-plugin": "^8.18.0",
- "@typescript-eslint/parser": "^8.18.0",
- "aws-cdk-lib": "^2.177.0",
- "cdk-nag": "^2.34.23",
- "constructs": "^10.4.2",
- "eslint": "^9.16.0",
- "eslint-config-prettier": "^9.1.0",
- "eslint-plugin-prettier": "^5.2.1",
- "eslint-plugin-tsdoc": "^0.4.0",
- "globals": "^15.13.0",
- "jest": "^29.7.0",
- "prettier": "^3.4.2",
- "ts-jest": "^29.2.5",
- "ts-node": "^10.9.2",
- "typedoc": "^0.27.4",
- "typescript": "~5.7.2",
- "typescript-eslint": "^8.18.0"
- },
- "peerDependencies": {
- "aws-cdk-lib": "^2.177.0",
- "constructs": "^10.4.2"
- },
- "resolutions": {
- "glob": "^9.3.5"
- },
- "overrides": {
- "glob": "^9.3.5"
- }
-}
+{
+ "name": "aws4embeddedlinux-cdk-lib",
+ "version": "0.2.0",
+ "main": "dist/lib/index.js",
+ "types": "dist/lib/index.d.ts",
+ "license": "MIT",
+ "scripts": {
+ "build": "tsc",
+ "check": "eslint '**/*.{js,ts,json}'",
+ "clean": "tsc --build --clean",
+ "doc": "typedoc --sort source-order --readme README.md",
+ "format": "eslint '**/*.{js,ts,json}' --quiet --fix",
+ "postinstall": "npm run build > /dev/null || echo 'prepapre command completed successfully with errors'",
+ "prepare": "npm run build > /dev/null || echo 'prepapre command completed successfully with errors'",
+ "prepare-commit": "pre-commit run --all-files --color=always --show-diff-on-failure",
+ "test": "jest",
+ "update-snapshot": "jest -u",
+ "watch": "tsc -w",
+ "postclean": "rm -rf ./dist",
+ "prebuild": "./utils/build-assets.sh",
+ "precheck": "yarn clean",
+ "preformat": "yarn clean",
+ "pretest": "yarn prebuild",
+ "preupdate-snapshot": "yarn prebuild"
+ },
+ "dependencies": {
+ "aws-cdk-lib": "2.176.0",
+ "constructs": "^10.4.2"
+ },
+ "devDependencies": {
+ "@eslint/compat": "^1.2.4",
+ "@eslint/eslintrc": "^3.2.0",
+ "@eslint/js": "^9.16.0",
+ "@types/jest": "^29.5.14",
+ "@types/node": "20.14.8",
+ "@typescript-eslint/eslint-plugin": "^8.18.0",
+ "@typescript-eslint/parser": "^8.18.0",
+ "aws-cdk": "2.176.0",
+ "cdk-nag": "^2.35.0",
+ "eslint": "^9.16.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-prettier": "^5.2.1",
+ "eslint-plugin-tsdoc": "^0.4.0",
+ "globals": "^15.13.0",
+ "jest": "^29.7.0",
+ "prettier": "^3.4.2",
+ "ts-jest": "^29.2.5",
+ "ts-node": "^10.9.2",
+ "typedoc": "^0.27.4",
+ "typescript": "~5.7.2",
+ "typescript-eslint": "^8.18.0"
+ },
+ "resolutions": {
+ "glob": "^9.3.5"
+ },
+ "overrides": {
+ "glob": "^9.3.5"
+ },
+ "packageManager": "yarn@4.6.0"
+}
diff --git a/assets/build-image/ubuntu_22_04/Dockerfile b/source-repo/base-image/Dockerfile
similarity index 66%
rename from assets/build-image/ubuntu_22_04/Dockerfile
rename to source-repo/base-image/Dockerfile
index 3507a49..b0faabb 100644
--- a/assets/build-image/ubuntu_22_04/Dockerfile
+++ b/source-repo/base-image/Dockerfile
@@ -4,14 +4,14 @@ FROM public.ecr.aws/lts/ubuntu:22.04_stable AS base
ARG DEBIAN_FRONTEND=noninteractive
# Install Required Packages for the Build Host
-RUN apt-get update && apt-get install -y --no-install-recommends \
+RUN apt-get -qq update && apt-get -qq install -y --no-install-recommends \
gawk wget git diffstat unzip texinfo gcc build-essential chrpath \
socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
python3-subunit mesa-common-dev zstd liblz4-tool file locales xterm sudo
# Install packages used elsewhere in the build
-RUN apt-get install -y --no-install-recommends \
+RUN apt-get -qq install -y --no-install-recommends \
uuid-runtime sysstat iproute2 openssh-client curl python-is-python3 \
parted mtools dosfstools jq gpg gpg-agent qemu-utils rsync
@@ -21,11 +21,11 @@ RUN chmod a+rx /bin/repo
# Install aws cli v2
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/tmp/awscliv2.zip"
-RUN unzip /tmp/awscliv2.zip -d /tmp
+RUN unzip -qq /tmp/awscliv2.zip -d /tmp
RUN /tmp/aws/install
# install kas tool
-RUN pip3 install PyYAML==5.3.1 && pip3 install kas==4.0.0
+RUN pip3 install -q PyYAML==5.3.1 -q && pip3 install -q kas==4.0.0
RUN locale-gen en_US.UTF-8
@@ -33,18 +33,17 @@ RUN locale-gen en_US.UTF-8
RUN groupadd -g 1000 yoctouser
RUN useradd -u 1000 -g 1000 -m yoctouser
-# this will fix: https://gitlab.com/qemu-project/qemu/-/issues/447
-RUN sysctl vm.mmap_min_addr=65536
-
# These will be mount points for an EFS volume. This allows the cache to be reused.
-RUN mkdir /downloads && chown -R yoctouser /downloads
-RUN mkdir /sstate-cache && chown -R yoctouser /sstate-cache
-RUN mkdir /build-output && chown -R yoctouser /build-output
+RUN mkdir -p /nfs && chown -R yoctouser /nfs && chmod -R 755 /nfs
+
+RUN sudo -u yoctouser bash -c 'git config --global user.email "yoctouser@example.com"'
+RUN sudo -u yoctouser bash -c 'git config --global user.name "yoctouser"'
+RUN sudo -u yoctouser bash -c 'git config --global init.defaultBranch main'
-ENV SSTATE_DIR=/sstate-cache
-ENV DL_DIR=/downloads
ENV TMP_DIR=/tmp
-ENV OUTPUT_DIR=/build-output
+ENV SSTATE_DIR=/nfs/sstate-cache
+ENV DL_DIR=/nfs/downloads
+ENV OUTPUT_DIR=/nfs/build-output
ENV BB_ENV_PASSTHROUGH_ADDITIONS="SSTATE_DIR DL_DIR"
USER yoctouser
diff --git a/assets/build-image/ubuntu_22_04/buildspec.yml b/source-repo/base-image/buildspec.yml
similarity index 50%
rename from assets/build-image/ubuntu_22_04/buildspec.yml
rename to source-repo/base-image/buildspec.yml
index f989b0f..aedcaf6 100644
--- a/assets/build-image/ubuntu_22_04/buildspec.yml
+++ b/source-repo/base-image/buildspec.yml
@@ -2,17 +2,22 @@ version: 0.2
phases:
pre_build:
commands:
+ - echo "Pre build started - [$(date '+%F %H:%M:%S')]"
- echo Logging into Amazon ECR...
- aws ecr get-login-password --region $AWS_DEFAULT_REGION |
docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
+ - echo "Pre build completed - [$(date '+%F %H:%M:%S')]"
build:
commands:
- - echo Build started on `date`
- - echo Building the Docker image...
- - docker build -t ubuntu_22_04:$IMAGE_TAG ubuntu_22_04
+ - echo "Build started - [$(date '+%F %H:%M:%S')]"
+ - ls .
+ - echo "Building the Docker image $IMAGE_TAG ..."
+ - docker build -t ubuntu_22_04:$IMAGE_TAG .
- docker tag ubuntu_22_04:$IMAGE_TAG $ECR_REPOSITORY_URI:$IMAGE_TAG
+ - echo "Build completed - [$(date '+%F %H:%M:%S')]"
post_build:
commands:
- - echo Build completed on `date`
+ - echo "Post build statred - [$(date '+%F %H:%M:%S')]"
- echo Pushing the Docker image...
- docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
+ - echo "Post build completed - [$(date '+%F %H:%M:%S')]"
diff --git a/source-repo/kas/build.buildspec.yml b/source-repo/kas/build.buildspec.yml
index d7d0513..93a9bcb 100644
--- a/source-repo/kas/build.buildspec.yml
+++ b/source-repo/kas/build.buildspec.yml
@@ -11,31 +11,39 @@ phases:
pre_build:
run-as: root
commands:
- - chown -R yoctouser /sstate-cache
- - chown -R yoctouser /downloads
- - chmod 755 /sstate-cache
- - chmod 755 /downloads
+ - echo "Pre build started - [$(date '+%F %H:%M:%S')]"
+ - mkdir -p /nfs/sstate-cache && chown -R yoctouser /nfs/sstate-cache
+ - mkdir -p /nfs/downloads && chown -R yoctouser /nfs/downloads
+ - mkdir -p /nfs/build-output && chown -R yoctouser /nfs/build-output
+ - chmod -R 755 /nfs/sstate-cache
+ - chmod -R 755 /nfs/downloads
+ - chmod -R 755 /nfs/build-output
- |
if [[ -n "$PURGE_EFS" ]] ; then
echo "Starting EFS purge."
- rm -rvf /downloads/*
- rm -rvf /sstate-cache/*
+ rm -rvf /nfs/downloads/*
+ rm -rvf /nfs/sstate-cache/*
+ rm -rvf /nfs/build-output/*
fi
+ - echo "Pre build completed - [$(date '+%F %H:%M:%S')]"
build:
commands:
- - echo Build started on `date`
+ - echo "Build started - [$(date '+%F %H:%M:%S')]"
- export KAS_WORK_DIR=$TMP_DIR
- kas build kas.yml
+ - echo "Build completed - [$(date '+%F %H:%M:%S')]"
post_build:
commands:
+ - echo "Post build statred - [$(date '+%F %H:%M:%S')]"
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /sstate-cache -atime +30 -type f -delete
+ - find /nfs/sstate-cache -atime +30 -type f -delete
# only delete empty dirs
- - find /sstate-cache -atime +30 -type d -empty -delete
+ - find /nfs/sstate-cache -atime +30 -type d -empty -delete
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /downloads -atime +30 -type f -delete
+ - find /nfs/downloads -atime +30 -type f -delete
# only delete empty dirs
- - find /downloads -atime +30 -type d -empty -delete
+ - find /nfs/downloads -atime +30 -type d -empty -delete
+ - echo "Post build completed - [$(date '+%F %H:%M:%S')]"
artifacts:
discard-paths: true
diff --git a/source-repo/nxp-imx/build.buildspec.yml b/source-repo/nxp-imx/build.buildspec.yml
index 03b2003..65b4539 100644
--- a/source-repo/nxp-imx/build.buildspec.yml
+++ b/source-repo/nxp-imx/build.buildspec.yml
@@ -11,21 +11,28 @@ phases:
pre_build:
run-as: root
commands:
- - chown -R yoctouser /sstate-cache
- - chown -R yoctouser /downloads
- - chmod 755 /sstate-cache
- - chmod 755 /downloads
+ - echo "Pre build started - [$(date '+%F %H:%M:%S')]"
+ - mkdir -p /nfs/sstate-cache && chown -R yoctouser /nfs/sstate-cache
+ - mkdir -p /nfs/downloads && chown -R yoctouser /nfs/downloads
+ - mkdir -p /nfs/build-output && chown -R yoctouser /nfs/build-output
+ - chmod -R 755 /nfs/sstate-cache
+ - chmod -R 755 /nfs/downloads
+ - chmod -R 755 /nfs/build-output
- |
if [[ -n "$PURGE_EFS" ]] ; then
echo "Starting EFS purge."
- rm -rvf /downloads/*
- rm -rvf /sstate-cache/*
+ rm -rvf /nfs/downloads/*
+ rm -rvf /nfs/sstate-cache/*
+ rm -rvf /nfs/build-output/*
fi
+ - echo "Pre build completed - [$(date '+%F %H:%M:%S')]"
build:
commands:
- - echo Build started on `date`
+ - echo "Build started - [$(date '+%F %H:%M:%S')]"
+ - if [ -d .git ]; then rm -rf .git; fi
+ - git init $CODEBUILD_SRC_DIR && git add --all && git commit -m 'initial'
- repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-mickledore -m imx-6.1.22-2.0.0.xml
- - repo sync
+ - repo sync -c --no-tags -j$(nproc --all)
# If you have not accepted NXP's EULA for these layers, the build will
# prompt you repeatedly until the timeout. This next line is an
# intentional barrier to stop the build quickly and get your attention.
@@ -39,16 +46,19 @@ phases:
- echo 'include cve-extra-exclusions.inc' >> conf/local.conf
# build the image
- bitbake core-image-minimal
+ - echo "Build completed - [$(date '+%F %H:%M:%S')]"
post_build:
commands:
+ - echo "Post build statred - [$(date '+%F %H:%M:%S')]"
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /sstate-cache -atime +30 -type f -delete
+ - find /nfs/sstate-cache -atime +30 -type f -delete
# only delete empty dirs
- - find /sstate-cache -atime +30 -type d -empty -delete
+ - find /nfs/sstate-cache -atime +30 -type d -empty -delete
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /downloads -atime +30 -type f -delete
+ - find /nfs/downloads -atime +30 -type f -delete
# only delete empty dirs
- - find /downloads -atime +30 -type d -empty -delete
+ - find /nfs/downloads -atime +30 -type d -empty -delete
+ - echo "Post build completed - [$(date '+%F %H:%M:%S')]"
artifacts:
discard-paths: true
diff --git a/source-repo/poky-ami/build.buildspec.yml b/source-repo/poky-ami/build.buildspec.yml
index ee3946e..005f64e 100644
--- a/source-repo/poky-ami/build.buildspec.yml
+++ b/source-repo/poky-ami/build.buildspec.yml
@@ -11,21 +11,28 @@ phases:
pre_build:
run-as: root
commands:
- - chown -R yoctouser /sstate-cache
- - chown -R yoctouser /downloads
- - chmod 755 /sstate-cache
- - chmod 755 /downloads
+ - echo "Pre build started - [$(date '+%F %H:%M:%S')]"
+ - mkdir -p /nfs/sstate-cache && chown -R yoctouser /nfs/sstate-cache
+ - mkdir -p /nfs/downloads && chown -R yoctouser /nfs/downloads
+ - mkdir -p /nfs/build-output && chown -R yoctouser /nfs/build-output
+ - chmod -R 755 /nfs/sstate-cache
+ - chmod -R 755 /nfs/downloads
+ - chmod -R 755 /nfs/build-output
- |
if [[ -n "$PURGE_EFS" ]] ; then
echo "Starting EFS purge."
- rm -rvf /downloads/*
- rm -rvf /sstate-cache/*
+ rm -rvf /nfs/downloads/*
+ rm -rvf /nfs/sstate-cache/*
+ rm -rvf /nfs/build-output/*
fi
+ - echo "Pre build completed - [$(date '+%F %H:%M:%S')]"
build:
commands:
- - echo Build started on `date`
+ - echo "Build started - [$(date '+%F %H:%M:%S')]"
+ - if [ -d .git ]; then rm -rf .git; fi
+ - git init $CODEBUILD_SRC_DIR && git add --all && git commit -m 'initial'
- repo init -u $CODEBUILD_SRC_DIR -b main -m manifest.xml
- - repo sync
+ - repo sync -c --no-tags -j$(nproc --all)
- . poky/oe-init-build-env $TMP_DIR
- bitbake-layers add-layer $CODEBUILD_SRC_DIR/meta-openembedded/meta-oe
- bitbake-layers add-layer $CODEBUILD_SRC_DIR/meta-openembedded/meta-python
@@ -43,26 +50,40 @@ phases:
- echo 'include cve-extra-exclusions.inc' >> $TMP_DIR/conf/local.conf
# build the image
- bitbake core-image-minimal
- - echo Build completed on `date`
+ - echo "Build completed - [$(date '+%F %H:%M:%S')]"
post_build:
commands:
- - echo AMI Upload started on `date`
+ - echo "Post build statred - [$(date '+%F %H:%M:%S')]"
+ - echo AMI Upload started
# This is required because the CDK asset uploader does not seem to carry permissions though.
- - aws s3 cp ${SCRIPT_URL} $CODEBUILD_SRC_DIR/create-ec2-ami.sh
+ # - aws s3 cp ${SCRIPT_URL} $CODEBUILD_SRC_DIR/create-ec2-ami.sh
+ # - chmod +x $CODEBUILD_SRC_DIR/create-ec2-ami.sh
- chmod +x $CODEBUILD_SRC_DIR/create-ec2-ami.sh
- - cat $CODEBUILD_SRC_DIR/create-ec2-ami.sh
# this list all testdata.json and *.vhd files
- find $TMP_DIR/tmp/deploy/images/aws-ec2-arm64/ -name *.testdata.json
- find $TMP_DIR/tmp/deploy/images/aws-ec2-arm64/ -name *.vhd
- - $CODEBUILD_SRC_DIR/create-ec2-ami.sh $IMPORT_BUCKET 16 core-image-minimal aws-ec2-arm64 $TMP_DIR/tmp $ROLE_NAME .rootfs
+ # - $CODEBUILD_SRC_DIR/create-ec2-ami.sh $PIPELINE_OUTPUT_BUCKET 16 core-image-minimal aws-ec2-arm64 $TMP_DIR/tmp $VM_IMPORT_ROLE .rootfs
+ - |
+ $CODEBUILD_SRC_DIR/create-ec2-ami.sh \
+ IMPORT_BUCKET_NAME=$PIPELINE_OUTPUT_BUCKET \
+ AMI_DISK_SIZE_GB=16 \
+ IMAGE_NAME=core-image-minimal \
+ MACHINE_NAME=aws-ec2-arm64 \
+ TMPDIR=$TMP_DIR/tmp \
+ ROLE_NAME=$VM_IMPORT_ROLE \
+ IMAGE_EXTEN=.rootfs \
+ PIPELINE_PROJECT_NAME=$PIPELINE_PROJECT_NAME
+
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /sstate-cache -atime +30 -type f -delete
+ - find /nfs/sstate-cache -atime +30 -type f -delete
# only delete empty dirs
- - find /sstate-cache -atime +30 -type d -empty -delete
+ - find /nfs/sstate-cache -atime +30 -type d -empty -delete
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /downloads -atime +30 -type f -delete
+ - find /nfs/downloads -atime +30 -type f -delete
# only delete empty dirs
- - find /downloads -atime +30 -type d -empty -delete
+ - find /nfs/downloads -atime +30 -type d -empty -delete
+ - echo "Post build completed - [$(date '+%F %H:%M:%S')]"
+
artifacts:
discard-paths: true
files:
diff --git a/assets/create-ec2-ami.sh b/source-repo/poky-ami/create-ec2-ami.sh
old mode 100755
new mode 100644
similarity index 71%
rename from assets/create-ec2-ami.sh
rename to source-repo/poky-ami/create-ec2-ami.sh
index 4aa1192..a8ea80a
--- a/assets/create-ec2-ami.sh
+++ b/source-repo/poky-ami/create-ec2-ami.sh
@@ -1,28 +1,62 @@
#!/usr/bin/env bash
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
+
set -eo pipefail
[ "$DEBUG" == 'true' ] && set -x
ARGC=$#
if [ $ARGC -lt 6 ]; then
- echo "ERROR: args 1: import bucket name 2:AMI disk size in GB 3:IMAGE_NAME 4:MACHINE_NAME 5:TMPDIR 6:ROLE NAME 7:IMAGE_EXTEN 8:TESTDATA_JSON_EXTEN."
+ echo "ERROR: missing args "
+ echo " 1:IMPORT_BUCKET_NAME"
+ echo " 2:AMI_DISK_SIZE_GB"
+ echo " 3:IMAGE_NAME"
+ echo " 4:MACHINE_NAME"
+ echo " 5:TMPDIR"
+ echo " 6:ROLE NAME"
+ echo " 7:IMAGE_EXTEN"
+ echo " 8:TESTDATA_JSON_EXTEN"
+ echo " 9:PIPELINE_PROJECT_NAME"
exit 1
fi
-IMPORT_BUCKET_NAME=$1
-AMI_DISK_SIZE_GB=$2
-IMAGE_NAME=$3
-MACHINE_NAME=$4
-TMPDIR=${5:-build/tmp}
-ROLE_NAME=$6
-IMAGE_EXTEN=${7:-}
-TESTDATA_JSON_EXTEN=${8:-}
+
+for arg in "$@"
+do
+ key=$(echo "$arg" | cut -f1 -d=)
+
+ len=${#key}
+ val="${arg:$len+1}"
+
+ export "$key"="$val"
+done
+
+# IMPORT_BUCKET_NAME=$1
+# AMI_DISK_SIZE_GB=$2
+# IMAGE_NAME=$3
+# MACHINE_NAME=$4
+TMPDIR=${TMPDIR:-build/tmp}
+# ROLE_NAME=$6
+IMAGE_EXTEN=${IMAGE_EXTEN:-}
+TESTDATA_JSON_EXTEN=${TESTDATA_JSON_EXTEN:-}
+# PIPELINE_PROJECT_NAME=${9:-}
CREATED_BY_TAG="aws4embeddedlinux-ci"
IMG_DIR="${TMPDIR}/deploy/images/${MACHINE_NAME}"
TESTDATA_JSON="${IMG_DIR}/${IMAGE_NAME}-${MACHINE_NAME}${TESTDATA_JSON_EXTEN}.testdata.json"
+
+echo "Input parameters:"
+echo " 1:IMPORT_BUCKET_NAME : $IMPORT_BUCKET_NAME"
+echo " 2:AMI_DISK_SIZE_GB : $AMI_DISK_SIZE_GB"
+echo " 3:IMAGE_NAME : $IMAGE_NAME"
+echo " 4:MACHINE_NAME : $MACHINE_NAME"
+echo " 5:TMPDIR : $TMPDIR"
+echo " 6:ROLE NAME : $ROLE"
+echo " 7:IMAGE_EXTEN : $IMAGE_EXTEN"
+echo " 8:TESTDATA_JSON_EXTEN : $TESTDATA_JSON_EXTEN"
+echo " 9:PIPELINE_PROJECT_NAME : $PIPELINE_PROJECT_NAME"
+
DISTRO=$(jq -r '.DISTRO' "$TESTDATA_JSON")
DISTRO_CODENAME=$(jq -r '.DISTRO_CODENAME' "$TESTDATA_JSON")
DISTRO_NAME=$(jq -r '.DISTRO_NAME' "$TESTDATA_JSON")
@@ -32,7 +66,6 @@ TARGET_ARCH=$(jq -r '.TARGET_ARCH' "$TESTDATA_JSON")
IMAGE_NAME=$(jq -r '.IMAGE_NAME' "$TESTDATA_JSON")
IMAGE_ROOTFS_SIZE=$(jq -r '.IMAGE_ROOTFS_SIZE' "$TESTDATA_JSON")
-
echo DISTRO="$DISTRO"
echo DISTRO_CODENAME="$DISTRO_CODENAME"
echo DISTRO_NAME="$DISTRO_NAME"
@@ -43,6 +76,8 @@ echo IMAGE_ROOTFS_SIZE="$IMAGE_ROOTFS_SIZE"
echo AMI_DISK_SIZE_GB="$AMI_DISK_SIZE_GB"
+
+
echo "Pushing image ${IMAGE_NAME}${IMAGE_EXTEN}.wic.vhd to s3://${IMPORT_BUCKET_NAME}"
aws s3 cp "${IMG_DIR}/${IMAGE_NAME}${IMAGE_EXTEN}.wic.vhd" "s3://${IMPORT_BUCKET_NAME}"
@@ -58,7 +93,11 @@ cat < image-import.json
EOF
echo "Importing image file into snapshot "
-command_output=$(aws ec2 import-snapshot --disk-container "file://image-import.json" --tag-specifications "ResourceType=import-snapshot-task,Tags=[{Key=CreatedBy,Value=$CREATED_BY_TAG}]" --role-name "$ROLE_NAME" --encrypted)
+command_output=$(aws ec2 import-snapshot \
+ --disk-container "file://image-import.json" \
+ --tag-specifications "ResourceType=import-snapshot-task,Tags=[{Key=CreatedBy,Value=$CREATED_BY_TAG},{Key=PipelineProject,Value=$PIPELINE_PROJECT_NAME}]" \
+ --role-name "$ROLE_NAME" --encrypted
+)
command_exit_code=$?
if [[ "$command_exit_code" -ne 0 ]]; then
@@ -99,7 +138,7 @@ else
echo "Architecture not supported"
exit 1
fi
-DESCRIPTION=$(echo "DISTRO=$DISTRO;DISTRO_CODENAME=$DISTRO_CODENAME;DISTRO_NAME=$DISTRO_NAME;DISTRO_VERSION=$DISTRO_VERSION;BUILDNAME=$BUILDNAME;TARGET_ARCH=$ARCHITECTURE;IMAGE_NAME=$IMAGE_NAME" | cut -c -255)
+DESCRIPTION=$(echo "PIPELINE_PROJECT_NAME=$PIPELINE_PROJECT_NAME;DISTRO=$DISTRO;DISTRO_CODENAME=$DISTRO_CODENAME;DISTRO_NAME=$DISTRO_NAME;DISTRO_VERSION=$DISTRO_VERSION;BUILDNAME=$BUILDNAME;TARGET_ARCH=$ARCHITECTURE;IMAGE_NAME=$IMAGE_NAME" | cut -c -255)
cat < register-ami.json
{
@@ -129,10 +168,17 @@ if [ "$IMAGE_ID" != "" ]; then
echo "Deregistering existing image $IMAGE_ID"
aws ec2 deregister-image --image-id "${IMAGE_ID}" > /dev/null 2>&1
fi
-echo "Registering AMI with Snapshot $SNAPSHOT_ID"
-AMI_ID=$(aws ec2 register-image --name "${AMI_NAME}" --cli-input-json="file://register-ami.json" --query 'ImageId' --output text)
+echo "Registering AMI with Snapshot $SNAPSHOT_ID with parameters:"
echo "AMI name: $AMI_NAME"
-echo "AMI ID: $AMI_ID"
+more register-ami.json
+AMI_ID=$(aws ec2 register-image \
+ --name "${AMI_NAME}" \
+ --cli-input-json="file://register-ami.json" \
+ --tag-specifications "ResourceType=image,Tags=[{Key=Name,Value=$PIPELINE_PROJECT_NAME},{Key=CreatedBy,Value=$CREATED_BY_TAG},{Key=PipelineProject,Value=$PIPELINE_PROJECT_NAME}]" \
+ --query 'ImageId' \
+ --output text
+)
+echo "Registered AMI ID: $AMI_ID"
rm register-ami.json
echo "Backing up AMI with ID $AMI_ID in S3"
diff --git a/source-repo/poky-ami/manifest.xml b/source-repo/poky-ami/manifest.xml
index 8d68d44..c3564a4 100644
--- a/source-repo/poky-ami/manifest.xml
+++ b/source-repo/poky-ami/manifest.xml
@@ -1,11 +1,15 @@
-
-
-
+
+
+
-
-
-
-
+
+
+
+
diff --git a/source-repo/poky/build.buildspec.yml b/source-repo/poky/build.buildspec.yml
index fe6a682..d3d8907 100644
--- a/source-repo/poky/build.buildspec.yml
+++ b/source-repo/poky/build.buildspec.yml
@@ -11,21 +11,28 @@ phases:
pre_build:
run-as: root
commands:
- - chown -R yoctouser /sstate-cache
- - chown -R yoctouser /downloads
- - chmod 755 /sstate-cache
- - chmod 755 /downloads
+ - echo "Pre build started - [$(date '+%F %H:%M:%S')]"
+ - mkdir -p /nfs/sstate-cache && chown -R yoctouser /nfs/sstate-cache
+ - mkdir -p /nfs/downloads && chown -R yoctouser /nfs/downloads
+ - mkdir -p /nfs/build-output && chown -R yoctouser /nfs/build-output
+ - chmod -R 755 /nfs/sstate-cache
+ - chmod -R 755 /nfs/downloads
+ - chmod -R 755 /nfs/build-output
- |
if [[ -n "$PURGE_EFS" ]] ; then
echo "Starting EFS purge."
- rm -rvf /downloads/*
- rm -rvf /sstate-cache/*
+ rm -rvf /nfs/downloads/*
+ rm -rvf /nfs/sstate-cache/*
+ rm -rvf /nfs/build-output/*
fi
+ - echo "Pre build completed - [$(date '+%F %H:%M:%S')]"
build:
commands:
- - echo Build started on `date`
- - repo init -u $CODEBUILD_SRC_DIR -b main -m manifest.xml
- - repo sync
+ - echo "Build started - [$(date '+%F %H:%M:%S')]"
+ - if [ -d .git ]; then rm -rf .git; fi
+ - git init $CODEBUILD_SRC_DIR && git add --all && git commit -m 'initial'
+ - repo init -u $CODEBUILD_SRC_DIR -m manifest.xml
+ - repo sync -c --no-tags -j$(nproc --all)
- . poky/oe-init-build-env $TMP_DIR
# Update our local conf to check for CVEs
- echo 'INHERIT += "cve-check"' >> $TMP_DIR/conf/local.conf
@@ -33,16 +40,19 @@ phases:
- echo 'include cve-extra-exclusions.inc' >> $TMP_DIR/conf/local.conf
# build the image
- bitbake core-image-minimal
+ - echo "Build completed - [$(date '+%F %H:%M:%S')]"
post_build:
commands:
+ - echo "Post build statred - [$(date '+%F %H:%M:%S')]"
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /sstate-cache -atime +30 -type f -delete
+ - find /nfs/sstate-cache -atime +30 -type f -delete
# only delete empty dirs
- - find /sstate-cache -atime +30 -type d -empty -delete
+ - find /nfs/sstate-cache -atime +30 -type d -empty -delete
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /downloads -atime +30 -type f -delete
+ - find /nfs/downloads -atime +30 -type f -delete
# only delete empty dirs
- - find /downloads -atime +30 -type d -empty -delete
+ - find /nfs/downloads -atime +30 -type d -empty -delete
+ - echo "Post build completed - [$(date '+%F %H:%M:%S')]"
artifacts:
discard-paths: true
diff --git a/source-repo/poky/manifest.xml b/source-repo/poky/manifest.xml
index 2c541aa..c3564a4 100644
--- a/source-repo/poky/manifest.xml
+++ b/source-repo/poky/manifest.xml
@@ -1,6 +1,15 @@
-
+
+
+
-
+
+
+
+
diff --git a/source-repo/meta-aws-demo/build.buildspec.yml b/source-repo/qemu/build.buildspec.yml
similarity index 54%
rename from source-repo/meta-aws-demo/build.buildspec.yml
rename to source-repo/qemu/build.buildspec.yml
index c169330..cf19e15 100644
--- a/source-repo/meta-aws-demo/build.buildspec.yml
+++ b/source-repo/qemu/build.buildspec.yml
@@ -11,38 +11,46 @@ phases:
pre_build:
run-as: root
commands:
- - chown -R yoctouser /sstate-cache
- - chown -R yoctouser /downloads
- - chmod 755 /sstate-cache
- - chmod 755 /downloads
+ - echo "Pre build started - [$(date '+%F %H:%M:%S')]"
+ - mkdir -p /nfs/sstate-cache && chown -R yoctouser /nfs/sstate-cache
+ - mkdir -p /nfs/downloads && chown -R yoctouser /nfs/downloads
+ - mkdir -p /nfs/build-output && chown -R yoctouser /nfs/build-output
+ - chmod -R 755 /nfs/sstate-cache
+ - chmod -R 755 /nfs/downloads
+ - chmod -R 755 /nfs/build-output
- |
if [[ -n "$PURGE_EFS" ]] ; then
echo "Starting EFS purge."
- rm -rvf /downloads/*
- rm -rvf /sstate-cache/*
+ rm -rvf /nfs/downloads/*
+ rm -rvf /nfs/sstate-cache/*
+ rm -rvf /nfs/build-output/*
fi
+ - echo "Pre build completed - [$(date '+%F %H:%M:%S')]"
build:
commands:
+ - echo "Build started - [$(date '+%F %H:%M:%S')]"
- git clone https://github.com/aws4embeddedlinux/meta-aws-demos
- cd meta-aws-demos
- git submodule update --init --recursive
- - echo Build started on `date`
- . ./init-build-env $TMP_DIR
# Update our local conf to check for CVEs
- echo 'INHERIT += "cve-check"' >> $TMP_DIR/conf/local.conf
# this will suppress false positive CVEs
- echo 'include cve-extra-exclusions.inc' >> $TMP_DIR/conf/local.conf
- BUILD_DEVICE=qemu bitbake core-image-minimal
+ - echo "Build completed - [$(date '+%F %H:%M:%S')]"
post_build:
commands:
+ - echo "Post build statred - [$(date '+%F %H:%M:%S')]"
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /sstate-cache -atime +30 -type f -delete
+ - find /nfs/sstate-cache -atime +30 -type f -delete
# only delete empty dirs
- - find /sstate-cache -atime +30 -type d -empty -delete
+ - find /nfs/sstate-cache -atime +30 -type d -empty -delete
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /downloads -atime +30 -type f -delete
+ - find /nfs/downloads -atime +30 -type f -delete
# only delete empty dirs
- - find /downloads -atime +30 -type d -empty -delete
+ - find /nfs/downloads -atime +30 -type d -empty -delete
+ - echo "Post build completed - [$(date '+%F %H:%M:%S')]"
artifacts:
discard-paths: true
diff --git a/source-repo/renesas/build.buildspec.yml b/source-repo/renesas/build.buildspec.yml
index 225d1ee..bf1eed6 100644
--- a/source-repo/renesas/build.buildspec.yml
+++ b/source-repo/renesas/build.buildspec.yml
@@ -11,33 +11,41 @@ phases:
pre_build:
run-as: root
commands:
- - chown -R yoctouser /sstate-cache
- - chown -R yoctouser /downloads
- - chmod 755 /sstate-cache
- - chmod 755 /downloads
- - chmod 755 build.sh
+ - echo "Pre build started - [$(date '+%F %H:%M:%S')]"
+ - mkdir -p /nfs/sstate-cache && chown -R yoctouser /nfs/sstate-cache
+ - mkdir -p /nfs/downloads && chown -R yoctouser /nfs/downloads
+ - mkdir -p /nfs/build-output && chown -R yoctouser /nfs/build-output
+ - chmod -R 755 /nfs/sstate-cache
+ - chmod -R 755 /nfs/downloads
+ - chmod -R 755 /nfs/build-output
- |
if [[ -n "$PURGE_EFS" ]] ; then
echo "Starting EFS purge."
- rm -rvf /downloads/*
- rm -rvf /sstate-cache/*
+ rm -rvf /nfs/downloads/*
+ rm -rvf /nfs/sstate-cache/*
+ rm -rvf /nfs/build-output/*
fi
+ - echo "Pre build completed - [$(date '+%F %H:%M:%S')]"
build:
commands:
+ - echo "Build started - [$(date '+%F %H:%M:%S')]"
# BB_ENV_EXTRAWHITE is still used in Dunfell release and was renamed afterwards to BB_ENV_PASSTHROUGH_ADDITIONS
- export BB_ENV_EXTRAWHITE=$BB_ENV_PASSTHROUGH_ADDITIONS
- - echo Build started on `date`
+ - chmod +x ./build.sh
- ./build.sh h3ulcb
+ - echo "Build completed - [$(date '+%F %H:%M:%S')]"
post_build:
commands:
+ - echo "Post build statred - [$(date '+%F %H:%M:%S')]"
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /sstate-cache -atime +30 -type f -delete
+ - find /nfs/sstate-cache -atime +30 -type f -delete
# only delete empty dirs
- - find /sstate-cache -atime +30 -type d -empty -delete
+ - find /nfs/sstate-cache -atime +30 -type d -empty -delete
# Prune old files in our EFS Mounts, that are not accessed by this or any build within 30 days
- - find /downloads -atime +30 -type f -delete
+ - find /nfs/downloads -atime +30 -type f -delete
# only delete empty dirs
- - find /downloads -atime +30 -type d -empty -delete
+ - find /nfs/downloads -atime +30 -type d -empty -delete
+ - echo "Post build completed - [$(date '+%F %H:%M:%S')]"
artifacts:
discard-paths: true
diff --git a/source-repo/renesas/build.sh b/source-repo/renesas/build.sh
index bb0ea43..4ff77d9 100644
--- a/source-repo/renesas/build.sh
+++ b/source-repo/renesas/build.sh
@@ -1,27 +1,28 @@
#!/bin/bash
set -e
-BOARD_LIST=("h3ulcb" "m3ulcb")
-TARGET_BOARD=$1
-PROPRIETARY_DIR=`pwd`/proprietary
-WORK=`pwd`/${TARGET_BOARD}
+export TARGET_BOARD=$1
+export BOARD_LIST=("h3ulcb" "m3ulcb")
+PROPRIETARY_DIR="$(pwd)/proprietary"
+export PROPRIETARY_DIR
+WORK="$(pwd)/${TARGET_BOARD}"
-GFX_MMP_LIB=R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20220121.zip
-GFX_MMP_DRIVER=R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20220121.zip
+export GFX_MMP_LIB=R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20220121.zip
+export GFX_MMP_DRIVER=R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20220121.zip
Usage () {
echo "Usage: $0 \${TARGET_BOARD_NAME}"
echo "BOARD_NAME list: "
- for i in ${BOARD_LIST[@]}; do echo " - $i"; done
- exit
+ for i in "${BOARD_LIST[@]}"; do echo " - $i"; done
+ # exit
}
# Check Param.
-if ! `IFS=$'\n'; echo "${BOARD_LIST[*]}" | grep -qx "${TARGET_BOARD}"`; then
+if ! (IFS=$'\n'; echo "${BOARD_LIST[*]}" | grep -qx "${TARGET_BOARD}"); then
Usage
fi
-mkdir -p ${WORK}
-cd ${WORK}
+mkdir -p "${WORK}"
+cd "${WORK}"
# Clone basic Yocto layers in parallel
git clone git://git.yoctoproject.org/poky -b dunfell &
git clone git://git.openembedded.org/meta-openembedded -b dunfell &
@@ -29,18 +30,19 @@ git clone https://github.com/renesas-rcar/meta-renesas -b dunfell
# Wait for all clone operations
wait
# Switch to proper branches/commits
-WORK_PROP_DIR=${WORK}/proprietary
-mkdir -p ${WORK_PROP_DIR}
+WORK_PROP_DIR="${WORK}/proprietary"
+mkdir -p "${WORK_PROP_DIR}"
##TODO unzip -qo ${PROPRIETARY_DIR}/${GFX_MMP_LIB} -d ${WORK_PROP_DIR}
##TODO unzip -qo ${PROPRIETARY_DIR}/${GFX_MMP_DRIVER} -d ${WORK_PROP_DIR}
-cd ${WORK}/meta-renesas
-sh meta-rcar-gen3/docs/sample/copyscript/copy_proprietary_softwares.sh -f ${WORK_PROP_DIR}
-cd ${WORK}
-source poky/oe-init-build-env ${WORK}/build
-#cp ${WORK}/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/poky-gcc/bsp/*.conf ./conf/
-#cp ${WORK}/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/poky-gcc/gfx-only/*.conf ./conf/
-cp ${WORK}/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/poky-gcc/mmp/*.conf ./conf
-cd ${WORK}/build
+cd "${WORK}/meta-renesas"
+sh meta-rcar-gen3/docs/sample/copyscript/copy_proprietary_softwares.sh -f "${WORK_PROP_DIR}"
+cd "${WORK}"
+# shellcheck source=/dev/null
+source "poky/oe-init-build-env" "${WORK}/build"
+#cp "${WORK}/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/poky-gcc/bsp/"*.conf ./conf/
+#cp "${WORK}/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/poky-gcc/gfx-only/"*.conf ./conf/
+cp "${WORK}/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/poky-gcc/mmp/"*.conf ./conf
+cd "${WORK}/build"
cp conf/local-wayland.conf conf/local.conf
echo 'BB_DANGLINGAPPENDS_WARNONLY ?= "true"' >> conf/local.conf
diff --git a/test/__snapshots__/build-image-data.test.ts.snap b/test/__snapshots__/build-image-data.test.ts.snap
deleted file mode 100644
index 3137bf0..0000000
--- a/test/__snapshots__/build-image-data.test.ts.snap
+++ /dev/null
@@ -1,621 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Build Image Data Snapshot 1`] = `
-{
- "Parameters": {
- "BootstrapVersion": {
- "Default": "/cdk-bootstrap/hnb659fds/version",
- "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
- "Type": "AWS::SSM::Parameter::Value",
- },
- },
- "Resources": {
- "BuildImageBucketDeploymentAwsCliLayer7138A987": {
- "Properties": {
- "Content": {
- "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
- "S3Key": "arbitrary-file.ext",
- },
- "Description": "/opt/awscli/aws",
- },
- "Type": "AWS::Lambda::LayerVersion",
- },
- "BuildImageBucketDeploymentCustomResourceA6B3BEBF": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "DestinationBucketName": {
- "Ref": "BuildImageDataBucketE6A8BC04",
- },
- "Extract": true,
- "OutputObjectKeys": true,
- "Prune": true,
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536",
- "Arn",
- ],
- },
- "SourceBucketNames": [
- "cdk-hnb659fds-assets-111111111111-eu-central-1",
- ],
- "SourceObjectKeys": [
- "arbitrary-file.ext",
- ],
- },
- "Type": "Custom::CDKBucketDeployment",
- "UpdateReplacePolicy": "Delete",
- },
- "BuildImageBucketRoleC5D0D05C": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "Policies": [
- {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "logs:CreateLogGroup",
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- ],
- "Effect": "Allow",
- "Resource": "arn:aws:logs:eu-central-1:111111111111:log-group:/aws/lambda/BuildImageData-CustomCDKBucketDeployment*"",
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "cwPolicy",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "BuildImageBucketRoleDefaultPolicy39AC1070": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "kms:Decrypt",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":s3:::cdk-hnb659fds-assets-111111111111-eu-central-1",
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":s3:::cdk-hnb659fds-assets-111111111111-eu-central-1/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "BuildImageDataBucketE6A8BC04",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "BuildImageDataBucketE6A8BC04",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "BuildImageBucketRoleDefaultPolicy39AC1070",
- "Roles": [
- {
- "Ref": "BuildImageBucketRoleC5D0D05C",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "BuildImageDataBucketAutoDeleteObjectsCustomResource89CDEC31": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "BuildImageDataBucketPolicyBF163C5F",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "BuildImageDataBucketE6A8BC04",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "BuildImageDataBucketE6A8BC04": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "BucketEncryption": {
- "ServerSideEncryptionConfiguration": [
- {
- "ServerSideEncryptionByDefault": {
- "KMSMasterKeyID": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "SSEAlgorithm": "aws:kms",
- },
- },
- ],
- },
- "BucketName": "test-bucket",
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "LoggingBucket1E5A6F3B",
- },
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- {
- "Key": "aws-cdk:cr-owned:19b429dc",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "BuildImageDataBucketPolicyBF163C5F": {
- "Properties": {
- "Bucket": {
- "Ref": "BuildImageDataBucketE6A8BC04",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "BuildImageDataBucketE6A8BC04",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "BuildImageDataBucketE6A8BC04",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "BuildImageDataBucketE6A8BC04",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "BuildImageDataBucketE6A8BC04",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": {
- "DependsOn": [
- "BuildImageBucketRoleDefaultPolicy39AC1070",
- "BuildImageBucketRoleC5D0D05C",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
- "S3Key": "arbitrary-file.ext",
- },
- "Environment": {
- "Variables": {
- "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem",
- },
- },
- "Handler": "index.handler",
- "Layers": [
- {
- "Ref": "BuildImageBucketDeploymentAwsCliLayer7138A987",
- },
- ],
- "Role": {
- "Fn::GetAtt": [
- "BuildImageBucketRoleC5D0D05C",
- "Arn",
- ],
- },
- "Runtime": "python3.11",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
- "DependsOn": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
- "S3Key": "arbitrary-file.ext",
- },
- "Description": {
- "Fn::Join": [
- "",
- [
- "Lambda function for auto-deleting objects in ",
- {
- "Ref": "LoggingBucket1E5A6F3B",
- },
- " S3 bucket.",
- ],
- ],
- },
- "Handler": "index.handler",
- "MemorySize": 128,
- "Role": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "LoggingBucket1E5A6F3B": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "AccessControl": "LogDeliveryWrite",
- "OwnershipControls": {
- "Rules": [
- {
- "ObjectOwnership": "ObjectWriter",
- },
- ],
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "LoggingBucketAutoDeleteObjectsCustomResource3835D361": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "LoggingBucketPolicy21938756",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "LoggingBucket1E5A6F3B",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "LoggingBucketPolicy21938756": {
- "Properties": {
- "Bucket": {
- "Ref": "LoggingBucket1E5A6F3B",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "LoggingBucket1E5A6F3B",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "LoggingBucket1E5A6F3B",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "LoggingBucket1E5A6F3B",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "LoggingBucket1E5A6F3B",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "PipelineArtifactKeyEC0C0075": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EnableKeyRotation": true,
- "KeyPolicy": {
- "Statement": [
- {
- "Action": "kms:*",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::111111111111:root",
- ],
- ],
- },
- },
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::KMS::Key",
- "UpdateReplacePolicy": "Delete",
- },
- },
- "Rules": {
- "CheckBootstrapVersion": {
- "Assertions": [
- {
- "Assert": {
- "Fn::Not": [
- {
- "Fn::Contains": [
- [
- "1",
- "2",
- "3",
- "4",
- "5",
- ],
- {
- "Ref": "BootstrapVersion",
- },
- ],
- },
- ],
- },
- "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
- },
- ],
- },
- },
-}
-`;
diff --git a/test/__snapshots__/build-image-repo.test.ts.snap b/test/__snapshots__/build-image-repo.test.ts.snap
deleted file mode 100644
index fbbe919..0000000
--- a/test/__snapshots__/build-image-repo.test.ts.snap
+++ /dev/null
@@ -1,50 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Build Image Repository Snapshot 1`] = `
-{
- "Parameters": {
- "BootstrapVersion": {
- "Default": "/cdk-bootstrap/hnb659fds/version",
- "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
- "Type": "AWS::SSM::Parameter::Value",
- },
- },
- "Resources": {
- "BuildImageRepoDCD988F4": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EmptyOnDelete": true,
- },
- "Type": "AWS::ECR::Repository",
- "UpdateReplacePolicy": "Delete",
- },
- },
- "Rules": {
- "CheckBootstrapVersion": {
- "Assertions": [
- {
- "Assert": {
- "Fn::Not": [
- {
- "Fn::Contains": [
- [
- "1",
- "2",
- "3",
- "4",
- "5",
- ],
- {
- "Ref": "BootstrapVersion",
- },
- ],
- },
- ],
- },
- "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
- },
- ],
- },
- },
-}
-`;
diff --git a/test/__snapshots__/build-image-pipeline.test.ts.snap b/test/__snapshots__/codepipeline-embedded-linux-base-image.test.ts.snap
similarity index 57%
rename from test/__snapshots__/build-image-pipeline.test.ts.snap
rename to test/__snapshots__/codepipeline-embedded-linux-base-image.test.ts.snap
index 61ea95d..4c808c7 100644
--- a/test/__snapshots__/build-image-pipeline.test.ts.snap
+++ b/test/__snapshots__/codepipeline-embedded-linux-base-image.test.ts.snap
@@ -1,7 +1,49 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`Build Image Pipeline Snapshot 1`] = `
+exports[`EmbeddedLinuxCodePipelineBaseImageStack Snapshot 1`] = `
{
+ "Outputs": {
+ "ECRBaseImageCheckCommand": {
+ "Description": "The AWS CLI command to check if the ECR Image was pushed",
+ "Value": {
+ "Fn::Join": [
+ "",
+ [
+ "aws ecr list-images --repository-name "",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesECRRepositoryA0DB7EB625EEF25E",
+ },
+ "" --query "imageIds[?imageTag=='MyTestStack']"",
+ ],
+ ],
+ },
+ },
+ "ECRBaseImageTag": {
+ "Description": "The ECR Image Tag where the base image will be pushed",
+ "Value": "MyTestStack",
+ },
+ "ECRRepositoryName": {
+ "Description": "The ECR Repository name where the base image will be pushed",
+ "Value": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesECRRepositoryA0DB7EB625EEF25E",
+ },
+ },
+ "SourceURI": {
+ "Description": "The source-repo bucket uri for this pipeline.",
+ "Value": {
+ "Fn::Join": [
+ "",
+ [
+ "s3://",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
+ },
+ "/base-image/arbitrary-file.ext",
+ ],
+ ],
+ },
+ },
+ },
"Parameters": {
"BootstrapVersion": {
"Default": "/cdk-bootstrap/hnb659fds/version",
@@ -10,85 +52,111 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
},
"Resources": {
- "ArtifactAccessLoggingAutoDeleteObjectsCustomResourceD9DFD1B2": {
+ "CodePipelineBuildBaseImageBucketDeploymentAwsCliLayerF8B77510": {
+ "Properties": {
+ "Content": {
+ "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ "S3Key": "arbitrary-file.ext",
+ },
+ "Description": "/opt/awscli/aws",
+ },
+ "Type": "AWS::Lambda::LayerVersion",
+ },
+ "CodePipelineBuildBaseImageBucketDeploymentCustomResource9FCDB7FE": {
"DeletionPolicy": "Delete",
- "DependsOn": [
- "ArtifactAccessLoggingPolicyDC97CE59",
- ],
"Properties": {
- "BucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
+ "DestinationBucketKeyPrefix": "base-image",
+ "DestinationBucketName": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
},
+ "Extract": false,
+ "OutputObjectKeys": true,
+ "Prune": true,
"ServiceToken": {
"Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
+ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536",
"Arn",
],
},
+ "SourceBucketNames": [
+ "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ ],
+ "SourceObjectKeys": [
+ "arbitrary-file.ext",
+ ],
},
- "Type": "Custom::S3AutoDeleteObjects",
+ "Type": "Custom::CDKBucketDeployment",
"UpdateReplacePolicy": "Delete",
},
- "ArtifactAccessLoggingD6FCABA3": {
- "DeletionPolicy": "Delete",
+ "CodePipelineBuildBaseImageBucketDeploymentRoleDFF88C19": {
"Properties": {
- "AccessControl": "LogDeliveryWrite",
- "OwnershipControls": {
- "Rules": [
+ "AssumeRolePolicyDocument": {
+ "Statement": [
{
- "ObjectOwnership": "ObjectWriter",
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ },
},
],
+ "Version": "2012-10-17",
},
- "Tags": [
+ "Policies": [
{
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "logs:CreateLogGroup",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ ],
+ "Effect": "Allow",
+ "Resource": "arn:aws:logs:eu-central-1:111111111111:log-group:/aws/lambda/EmbeddedLinuxCodePipelineBaseImage-CustomCDKBucketDeployment*",
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "pipelineSourceBucketDeploymentPolicy",
},
],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
},
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
+ "Type": "AWS::IAM::Role",
},
- "ArtifactAccessLoggingPolicyDC97CE59": {
+ "CodePipelineBuildBaseImageBucketDeploymentRoleDefaultPolicy969D32AA": {
"Properties": {
- "Bucket": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
"PolicyDocument": {
"Statement": [
{
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ ],
+ "Effect": "Allow",
"Resource": [
{
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":s3:::cdk-hnb659fds-assets-111111111111-eu-central-1",
+ ],
],
},
{
"Fn::Join": [
"",
[
+ "arn:",
{
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
+ "Ref": "AWS::Partition",
},
- "/*",
+ ":s3:::cdk-hnb659fds-assets-111111111111-eu-central-1/*",
],
],
},
@@ -96,36 +164,28 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
{
"Action": [
- "s3:PutBucketPolicy",
+ "s3:GetObject*",
"s3:GetBucket*",
"s3:List*",
"s3:DeleteObject*",
+ "s3:PutObject",
+ "s3:PutObjectLegalHold",
+ "s3:PutObjectRetention",
+ "s3:PutObjectTagging",
+ "s3:PutObjectVersionTagging",
+ "s3:Abort*",
],
"Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
"Resource": [
{
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
},
{
"Fn::Join": [
"",
[
{
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
},
"/*",
],
@@ -133,47 +193,67 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
],
},
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
],
"Version": "2012-10-17",
},
+ "PolicyName": "CodePipelineBuildBaseImageBucketDeploymentRoleDefaultPolicy969D32AA",
+ "Roles": [
+ {
+ "Ref": "CodePipelineBuildBaseImageBucketDeploymentRoleDFF88C19",
+ },
+ ],
},
- "Type": "AWS::S3::BucketPolicy",
+ "Type": "AWS::IAM::Policy",
},
- "BuildImageBuildLogs65D4471D": {
- "DeletionPolicy": "Retain",
+ "CodePipelineBuildBaseImageBuildLogs48BFE4D7": {
+ "DeletionPolicy": "Delete",
"Properties": {
- "RetentionInDays": 3653,
+ "LogGroupName": "MyTestStack-CodePipelineBuildBaseImageBuildLogs",
+ "RetentionInDays": 365,
},
"Type": "AWS::Logs::LogGroup",
- "UpdateReplacePolicy": "Retain",
+ "UpdateReplacePolicy": "Delete",
},
- "BuildImagePipeline01DF392E": {
+ "CodePipelineBuildBaseImageCodePipeline7907AE86": {
"DependsOn": [
- "BuildImagePipelineRoleDefaultPolicy211D9F92",
- "BuildImagePipelineRole576404EF",
+ "CodePipelineBuildBaseImageCodePipelineRoleDefaultPolicy677B7353",
+ "CodePipelineBuildBaseImageCodePipelineRole73E36B25",
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
],
"Properties": {
"ArtifactStore": {
"EncryptionKey": {
"Id": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
},
"Type": "KMS",
},
"Location": {
- "Ref": "PipelineArtifacts4A9B2621",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesArtifactBucketFF61EB98FA6EAAC1",
},
"Type": "S3",
},
- "Name": "ubuntu_22_04BuildImagePipeline",
+ "Name": "MyTestStack",
"PipelineType": "V1",
"RestartExecutionOnUpdate": true,
"RoleArn": {
"Fn::GetAtt": [
- "BuildImagePipelineRole576404EF",
+ "CodePipelineBuildBaseImageCodePipelineRole73E36B25",
"Arn",
],
},
@@ -188,20 +268,21 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Version": "1",
},
"Configuration": {
+ "PollForSourceChanges": false,
"S3Bucket": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
},
- "S3ObjectKey": "data.zip",
+ "S3ObjectKey": "base-image/arbitrary-file.ext",
},
- "Name": "Build-Image-Source",
+ "Name": "Source",
"OutputArtifacts": [
{
- "Name": "BuildImageSource",
+ "Name": "Source",
},
],
"RoleArn": {
"Fn::GetAtt": [
- "BuildImagePipelineSourceBuildImageSourceCodePipelineActionRole30249AA3",
+ "CodePipelineBuildBaseImageCodePipelineSourceCodePipelineActionRole0F967AB4",
"Arn",
],
},
@@ -221,18 +302,18 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Configuration": {
"ProjectName": {
- "Ref": "BuildImageProjectD5B891B2",
+ "Ref": "CodePipelineBuildBaseImageProject69590E59",
},
},
"InputArtifacts": [
{
- "Name": "BuildImageSource",
+ "Name": "Source",
},
],
"Name": "Build",
"RoleArn": {
"Fn::GetAtt": [
- "BuildImagePipelineBuildCodePipelineActionRole15E18A3A",
+ "CodePipelineBuildBaseImageCodePipelineBuildCodePipelineActionRoleA6CA6F27",
"Arn",
],
},
@@ -245,7 +326,12 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Type": "AWS::CodePipeline::Pipeline",
},
- "BuildImagePipelineBuildCodePipelineActionRole15E18A3A": {
+ "CodePipelineBuildBaseImageCodePipelineBuildCodePipelineActionRoleA6CA6F27": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
@@ -273,7 +359,12 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Type": "AWS::IAM::Role",
},
- "BuildImagePipelineBuildCodePipelineActionRoleDefaultPolicyF886D181": {
+ "CodePipelineBuildBaseImageCodePipelineBuildCodePipelineActionRoleDefaultPolicyDDAF06D1": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"PolicyDocument": {
"Statement": [
@@ -286,7 +377,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": {
"Fn::GetAtt": [
- "BuildImageProjectD5B891B2",
+ "CodePipelineBuildBaseImageProject69590E59",
"Arn",
],
},
@@ -294,16 +385,21 @@ exports[`Build Image Pipeline Snapshot 1`] = `
],
"Version": "2012-10-17",
},
- "PolicyName": "BuildImagePipelineBuildCodePipelineActionRoleDefaultPolicyF886D181",
+ "PolicyName": "CodePipelineBuildBaseImageCodePipelineBuildCodePipelineActionRoleDefaultPolicyDDAF06D1",
"Roles": [
{
- "Ref": "BuildImagePipelineBuildCodePipelineActionRole15E18A3A",
+ "Ref": "CodePipelineBuildBaseImageCodePipelineBuildCodePipelineActionRoleA6CA6F27",
},
],
},
"Type": "AWS::IAM::Policy",
},
- "BuildImagePipelineEventsRole6FF38A6B": {
+ "CodePipelineBuildBaseImageCodePipelineEventsRoleD9A83D03": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
@@ -320,7 +416,12 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Type": "AWS::IAM::Role",
},
- "BuildImagePipelineEventsRoleDefaultPolicy7384E26F": {
+ "CodePipelineBuildBaseImageCodePipelineEventsRoleDefaultPolicyFCB5C7C5": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"PolicyDocument": {
"Statement": [
@@ -337,7 +438,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
":codepipeline:eu-central-1:111111111111:",
{
- "Ref": "BuildImagePipeline01DF392E",
+ "Ref": "CodePipelineBuildBaseImageCodePipeline7907AE86",
},
],
],
@@ -346,16 +447,98 @@ exports[`Build Image Pipeline Snapshot 1`] = `
],
"Version": "2012-10-17",
},
- "PolicyName": "BuildImagePipelineEventsRoleDefaultPolicy7384E26F",
+ "PolicyName": "CodePipelineBuildBaseImageCodePipelineEventsRoleDefaultPolicyFCB5C7C5",
"Roles": [
{
- "Ref": "BuildImagePipelineEventsRole6FF38A6B",
+ "Ref": "CodePipelineBuildBaseImageCodePipelineEventsRoleD9A83D03",
},
],
},
"Type": "AWS::IAM::Policy",
},
- "BuildImagePipelineRole576404EF": {
+ "CodePipelineBuildBaseImageCodePipelineMyTestStackCodePipelineBuildBaseImageCodePipelineFF25ACC6SourceEventRulebaseimage1ccdf1583059080a3911192a20ae50cc6b3bfa57d56d0b5b4d3866f920b3ad20zip04E1981E": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
+ "Properties": {
+ "EventPattern": {
+ "detail": {
+ "eventName": [
+ "CompleteMultipartUpload",
+ "CopyObject",
+ "PutObject",
+ ],
+ "requestParameters": {
+ "bucketName": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
+ },
+ ],
+ "key": [
+ "base-image/arbitrary-file.ext",
+ ],
+ },
+ "resources": {
+ "ARN": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
+ },
+ "/base-image/arbitrary-file.ext",
+ ],
+ ],
+ },
+ ],
+ },
+ },
+ "detail-type": [
+ "AWS API Call via CloudTrail",
+ ],
+ "source": [
+ "aws.s3",
+ ],
+ },
+ "State": "ENABLED",
+ "Targets": [
+ {
+ "Arn": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":codepipeline:eu-central-1:111111111111:",
+ {
+ "Ref": "CodePipelineBuildBaseImageCodePipeline7907AE86",
+ },
+ ],
+ ],
+ },
+ "Id": "Target0",
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "CodePipelineBuildBaseImageCodePipelineEventsRoleD9A83D03",
+ "Arn",
+ ],
+ },
+ },
+ ],
+ },
+ "Type": "AWS::Events::Rule",
+ },
+ "CodePipelineBuildBaseImageCodePipelineRole73E36B25": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
@@ -372,7 +555,12 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Type": "AWS::IAM::Role",
},
- "BuildImagePipelineRoleDefaultPolicy211D9F92": {
+ "CodePipelineBuildBaseImageCodePipelineRoleDefaultPolicy677B7353": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"PolicyDocument": {
"Statement": [
@@ -392,20 +580,14 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": [
{
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
},
{
"Fn::Join": [
"",
[
{
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
},
"/*",
],
@@ -423,10 +605,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
],
"Effect": "Allow",
"Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
},
},
{
@@ -434,7 +613,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": {
"Fn::GetAtt": [
- "BuildImagePipelineSourceBuildImageSourceCodePipelineActionRole30249AA3",
+ "CodePipelineBuildBaseImageCodePipelineSourceCodePipelineActionRole0F967AB4",
"Arn",
],
},
@@ -444,7 +623,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": {
"Fn::GetAtt": [
- "BuildImagePipelineBuildCodePipelineActionRole15E18A3A",
+ "CodePipelineBuildBaseImageCodePipelineBuildCodePipelineActionRoleA6CA6F27",
"Arn",
],
},
@@ -452,16 +631,21 @@ exports[`Build Image Pipeline Snapshot 1`] = `
],
"Version": "2012-10-17",
},
- "PolicyName": "BuildImagePipelineRoleDefaultPolicy211D9F92",
+ "PolicyName": "CodePipelineBuildBaseImageCodePipelineRoleDefaultPolicy677B7353",
"Roles": [
{
- "Ref": "BuildImagePipelineRole576404EF",
+ "Ref": "CodePipelineBuildBaseImageCodePipelineRole73E36B25",
},
],
},
"Type": "AWS::IAM::Policy",
},
- "BuildImagePipelineSourceBuildImageSourceCodePipelineActionRole30249AA3": {
+ "CodePipelineBuildBaseImageCodePipelineSourceCodePipelineActionRole0F967AB4": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
@@ -489,7 +673,12 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Type": "AWS::IAM::Role",
},
- "BuildImagePipelineSourceBuildImageSourceCodePipelineActionRoleDefaultPolicy7FF981F0": {
+ "CodePipelineBuildBaseImageCodePipelineSourceCodePipelineActionRoleDefaultPolicyC48B6A73": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageProject69590E59",
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
+ ],
"Properties": {
"PolicyDocument": {
"Statement": [
@@ -502,21 +691,31 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": [
{
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttBucket83908E77Arn063C8555",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
},
{
"Fn::Join": [
"",
[
{
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttBucket83908E77Arn063C8555",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
},
- "/data.zip",
+ "/base-image/arbitrary-file.ext",
],
],
},
],
},
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
{
"Action": [
"s3:DeleteObject*",
@@ -530,20 +729,14 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": [
{
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
},
{
"Fn::Join": [
"",
[
{
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
},
"/*",
],
@@ -560,25 +753,26 @@ exports[`Build Image Pipeline Snapshot 1`] = `
],
"Effect": "Allow",
"Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
},
},
],
"Version": "2012-10-17",
},
- "PolicyName": "BuildImagePipelineSourceBuildImageSourceCodePipelineActionRoleDefaultPolicy7FF981F0",
+ "PolicyName": "CodePipelineBuildBaseImageCodePipelineSourceCodePipelineActionRoleDefaultPolicyC48B6A73",
"Roles": [
{
- "Ref": "BuildImagePipelineSourceBuildImageSourceCodePipelineActionRole30249AA3",
+ "Ref": "CodePipelineBuildBaseImageCodePipelineSourceCodePipelineActionRole0F967AB4",
},
],
},
"Type": "AWS::IAM::Policy",
},
- "BuildImageProjectD5B891B2": {
+ "CodePipelineBuildBaseImageProject69590E59": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageBucketDeploymentAwsCliLayerF8B77510",
+ "CodePipelineBuildBaseImageBucketDeploymentCustomResource9FCDB7FE",
+ ],
"Properties": {
"Artifacts": {
"Type": "CODEPIPELINE",
@@ -587,13 +781,10 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Type": "NO_CACHE",
},
"EncryptionKey": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
},
"Environment": {
- "ComputeType": "BUILD_GENERAL1_LARGE",
+ "ComputeType": "BUILD_GENERAL1_MEDIUM",
"EnvironmentVariables": [
{
"Name": "ECR_REPOSITORY_URI",
@@ -609,7 +800,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Fn::Split": [
":",
{
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesECRRepositoryA0DB7EB6Arn5EC8487E",
},
],
},
@@ -623,7 +814,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Fn::Split": [
":",
{
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesECRRepositoryA0DB7EB6Arn5EC8487E",
},
],
},
@@ -635,7 +826,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"/",
{
- "Fn::ImportValue": "RepoStack:ExportsOutputRefRepository22E53BBD9A9E013B",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesECRRepositoryA0DB7EB625EEF25E",
},
],
],
@@ -654,7 +845,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
{
"Name": "IMAGE_TAG",
"Type": "PLAINTEXT",
- "Value": "ubuntu_22_04",
+ "Value": "MyTestStack",
},
],
"Image": "aws/codebuild/standard:7.0",
@@ -665,25 +856,30 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"LogsConfig": {
"CloudWatchLogs": {
"GroupName": {
- "Ref": "BuildImageBuildLogs65D4471D",
+ "Ref": "CodePipelineBuildBaseImageBuildLogs48BFE4D7",
},
"Status": "ENABLED",
},
},
+ "Name": "MyTestStack",
"ServiceRole": {
"Fn::GetAtt": [
- "BuildImageProjectRole3D242EB1",
+ "CodePipelineBuildBaseImageProjectRole12B97AA7",
"Arn",
],
},
"Source": {
- "BuildSpec": "ubuntu_22_04/buildspec.yml",
+ "BuildSpec": "buildspec.yml",
"Type": "CODEPIPELINE",
},
},
"Type": "AWS::CodeBuild::Project",
},
- "BuildImageProjectRole3D242EB1": {
+ "CodePipelineBuildBaseImageProjectRole12B97AA7": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageBucketDeploymentAwsCliLayerF8B77510",
+ "CodePipelineBuildBaseImageBucketDeploymentCustomResource9FCDB7FE",
+ ],
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
@@ -700,7 +896,11 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Type": "AWS::IAM::Role",
},
- "BuildImageProjectRoleDefaultPolicyDE9DF999": {
+ "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageBucketDeploymentAwsCliLayerF8B77510",
+ "CodePipelineBuildBaseImageBucketDeploymentCustomResource9FCDB7FE",
+ ],
"Properties": {
"PolicyDocument": {
"Statement": [
@@ -712,7 +912,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": {
"Fn::GetAtt": [
- "BuildImageBuildLogs65D4471D",
+ "CodePipelineBuildBaseImageBuildLogs48BFE4D7",
"Arn",
],
},
@@ -735,7 +935,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
":logs:eu-central-1:111111111111:log-group:/aws/codebuild/",
{
- "Ref": "BuildImageProjectD5B891B2",
+ "Ref": "CodePipelineBuildBaseImageProject69590E59",
},
],
],
@@ -750,7 +950,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
":logs:eu-central-1:111111111111:log-group:/aws/codebuild/",
{
- "Ref": "BuildImageProjectD5B891B2",
+ "Ref": "CodePipelineBuildBaseImageProject69590E59",
},
":*",
],
@@ -777,13 +977,25 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
":codebuild:eu-central-1:111111111111:report-group/",
{
- "Ref": "BuildImageProjectD5B891B2",
+ "Ref": "CodePipelineBuildBaseImageProject69590E59",
},
"-*",
],
],
},
},
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
{
"Action": [
"ecr:BatchCheckLayerAvailability",
@@ -796,7 +1008,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
],
"Effect": "Allow",
"Resource": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesECRRepositoryA0DB7EB6Arn5EC8487E",
},
},
{
@@ -813,20 +1025,14 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Effect": "Allow",
"Resource": [
{
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
},
{
"Fn::Join": [
"",
[
{
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
},
"/*",
],
@@ -841,275 +1047,22 @@ exports[`Build Image Pipeline Snapshot 1`] = `
],
"Effect": "Allow",
"Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
},
},
],
"Version": "2012-10-17",
},
- "PolicyName": "BuildImageProjectRoleDefaultPolicyDE9DF999",
+ "PolicyName": "CodePipelineBuildBaseImageProjectRoleDefaultPolicy6F99FFCC",
"Roles": [
{
- "Ref": "BuildImageProjectRole3D242EB1",
+ "Ref": "CodePipelineBuildBaseImageProjectRole12B97AA7",
},
],
},
"Type": "AWS::IAM::Policy",
},
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
- "DependsOn": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
- "S3Key": "faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6.zip",
- },
- "Description": {
- "Fn::Join": [
- "",
- [
- "Lambda function for auto-deleting objects in ",
- {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- " S3 bucket.",
- ],
- ],
- },
- "Handler": "index.handler",
- "MemorySize": 128,
- "Role": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "PipelineArtifactKeyEC0C0075": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EnableKeyRotation": true,
- "KeyPolicy": {
- "Statement": [
- {
- "Action": "kms:*",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::111111111111:root",
- ],
- ],
- },
- },
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::KMS::Key",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifacts4A9B2621": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "BucketEncryption": {
- "ServerSideEncryptionConfiguration": [
- {
- "ServerSideEncryptionByDefault": {
- "KMSMasterKeyID": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "SSEAlgorithm": "aws:kms",
- },
- },
- ],
- },
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- },
- "PublicAccessBlockConfiguration": {
- "BlockPublicAcls": true,
- "BlockPublicPolicy": true,
- "IgnorePublicAcls": true,
- "RestrictPublicBuckets": true,
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsAutoDeleteObjectsCustomResourceFEF48A36": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "PipelineArtifactsPolicy87787A0D",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsPolicy87787A0D": {
- "Properties": {
- "Bucket": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "WeeklySchedule60EC10E3": {
+ "CodePipelineBuildBaseImageWeeklyRefreshSchedule8D68D946": {
"Properties": {
"ScheduleExpression": "cron(0 6 ? * Monday *)",
"State": "ENABLED",
@@ -1125,7 +1078,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
":codepipeline:eu-central-1:111111111111:",
{
- "Ref": "BuildImagePipeline01DF392E",
+ "Ref": "CodePipelineBuildBaseImageCodePipeline7907AE86",
},
],
],
@@ -1133,7 +1086,7 @@ exports[`Build Image Pipeline Snapshot 1`] = `
"Id": "Target0",
"RoleArn": {
"Fn::GetAtt": [
- "BuildImagePipelineEventsRole6FF38A6B",
+ "CodePipelineBuildBaseImageCodePipelineEventsRoleD9A83D03",
"Arn",
],
},
@@ -1142,6 +1095,38 @@ exports[`Build Image Pipeline Snapshot 1`] = `
},
"Type": "AWS::Events::Rule",
},
+ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": {
+ "DependsOn": [
+ "CodePipelineBuildBaseImageBucketDeploymentRoleDefaultPolicy969D32AA",
+ "CodePipelineBuildBaseImageBucketDeploymentRoleDFF88C19",
+ ],
+ "Properties": {
+ "Code": {
+ "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ "S3Key": "arbitrary-file.ext",
+ },
+ "Environment": {
+ "Variables": {
+ "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem",
+ },
+ },
+ "Handler": "index.handler",
+ "Layers": [
+ {
+ "Ref": "CodePipelineBuildBaseImageBucketDeploymentAwsCliLayerF8B77510",
+ },
+ ],
+ "Role": {
+ "Fn::GetAtt": [
+ "CodePipelineBuildBaseImageBucketDeploymentRoleDFF88C19",
+ "Arn",
+ ],
+ },
+ "Runtime": "python3.11",
+ "Timeout": 900,
+ },
+ "Type": "AWS::Lambda::Function",
+ },
},
"Rules": {
"CheckBootstrapVersion": {
diff --git a/test/__snapshots__/codepipeline-embedded-linux.test.ts.snap b/test/__snapshots__/codepipeline-embedded-linux.test.ts.snap
new file mode 100644
index 0000000..22deb32
--- /dev/null
+++ b/test/__snapshots__/codepipeline-embedded-linux.test.ts.snap
@@ -0,0 +1,2171 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`EmbeddedLinuxCodePipelineStack Snapshot 1`] = `
+{
+ "Outputs": {
+ "ArtifactURI": {
+ "Description": "The artifact bucket of this pipeline.",
+ "Value": {
+ "Fn::Join": [
+ "",
+ [
+ "s3://",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesArtifactBucketFF61EB98FA6EAAC1",
+ },
+ "/poky/arbitrary-file.ext",
+ ],
+ ],
+ },
+ },
+ "OutputURI": {
+ "Description": "The output bucket of this pipeline.",
+ "Value": {
+ "Fn::Join": [
+ "",
+ [
+ "s3://",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesOutputBucketA2144F25070A0F1C",
+ },
+ "/poky",
+ ],
+ ],
+ },
+ },
+ "SourceURI": {
+ "Description": "The source bucket uri for this pipeline.",
+ "Value": {
+ "Fn::Join": [
+ "",
+ [
+ "s3://",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
+ },
+ "/poky/arbitrary-file.ext",
+ ],
+ ],
+ },
+ },
+ },
+ "Parameters": {
+ "BootstrapVersion": {
+ "Default": "/cdk-bootstrap/hnb659fds/version",
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
+ "Type": "AWS::SSM::Parameter::Value",
+ },
+ },
+ "Resources": {
+ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineBucketDeploymentRoleDefaultPolicy6C7ED123",
+ "EmbeddedLinuxCodePipelineBucketDeploymentRoleC8070F49",
+ ],
+ "Properties": {
+ "Code": {
+ "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ "S3Key": "arbitrary-file.ext",
+ },
+ "Environment": {
+ "Variables": {
+ "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem",
+ },
+ },
+ "Handler": "index.handler",
+ "Layers": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineBucketDeploymentAwsCliLayerAA1BBC13",
+ },
+ ],
+ "Role": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineBucketDeploymentRoleC8070F49",
+ "Arn",
+ ],
+ },
+ "Runtime": "python3.11",
+ "Timeout": 900,
+ },
+ "Type": "AWS::Lambda::Function",
+ },
+ "EmbeddedLinuxCodePipeline4B3C7651": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineRoleDefaultPolicy8CDA8ACC",
+ "EmbeddedLinuxCodePipelineRole784D6893",
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "ArtifactStore": {
+ "EncryptionKey": {
+ "Id": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ "Type": "KMS",
+ },
+ "Location": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesArtifactBucketFF61EB98FA6EAAC1",
+ },
+ "Type": "S3",
+ },
+ "Name": "MyTestStack",
+ "PipelineType": "V1",
+ "RestartExecutionOnUpdate": true,
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineRole784D6893",
+ "Arn",
+ ],
+ },
+ "Stages": [
+ {
+ "Actions": [
+ {
+ "ActionTypeId": {
+ "Category": "Source",
+ "Owner": "AWS",
+ "Provider": "S3",
+ "Version": "1",
+ },
+ "Configuration": {
+ "PollForSourceChanges": false,
+ "S3Bucket": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
+ },
+ "S3ObjectKey": "poky/arbitrary-file.ext",
+ },
+ "Name": "Source",
+ "OutputArtifacts": [
+ {
+ "Name": "Source",
+ },
+ ],
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineSourceCodePipelineActionRole1B690AB7",
+ "Arn",
+ ],
+ },
+ "RunOrder": 1,
+ },
+ ],
+ "Name": "Source",
+ },
+ {
+ "Actions": [
+ {
+ "ActionTypeId": {
+ "Category": "Build",
+ "Owner": "AWS",
+ "Provider": "CodeBuild",
+ "Version": "1",
+ },
+ "Configuration": {
+ "ProjectName": {
+ "Ref": "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ },
+ },
+ "InputArtifacts": [
+ {
+ "Name": "Source",
+ },
+ ],
+ "Name": "Build",
+ "OutputArtifacts": [
+ {
+ "Name": "Artifact_Build_Build",
+ },
+ ],
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineBuildCodePipelineActionRoleEE85AA1E",
+ "Arn",
+ ],
+ },
+ "RunOrder": 1,
+ },
+ ],
+ "Name": "Build",
+ },
+ {
+ "Actions": [
+ {
+ "ActionTypeId": {
+ "Category": "Deploy",
+ "Owner": "AWS",
+ "Provider": "S3",
+ "Version": "1",
+ },
+ "Configuration": {
+ "BucketName": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesArtifactBucketFF61EB98FA6EAAC1",
+ },
+ "Extract": "true",
+ "ObjectKey": "poky/arbitrary-file.ext",
+ },
+ "InputArtifacts": [
+ {
+ "Name": "Artifact_Build_Build",
+ },
+ ],
+ "Name": "Artifact",
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineArtifactCodePipelineActionRole97F56214",
+ "Arn",
+ ],
+ },
+ "RunOrder": 1,
+ },
+ ],
+ "Name": "Artifact",
+ },
+ ],
+ },
+ "Type": "AWS::CodePipeline::Pipeline",
+ },
+ "EmbeddedLinuxCodePipelineArtifactCodePipelineActionRole97F56214": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":iam::111111111111:root",
+ ],
+ ],
+ },
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineArtifactCodePipelineActionRoleDefaultPolicyF6D7AEC0": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "s3:DeleteObject*",
+ "s3:PutObject",
+ "s3:PutObjectLegalHold",
+ "s3:PutObjectRetention",
+ "s3:PutObjectTagging",
+ "s3:PutObjectVersionTagging",
+ "s3:Abort*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ "kms:Decrypt",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ {
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineArtifactCodePipelineActionRoleDefaultPolicyF6D7AEC0",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineArtifactCodePipelineActionRole97F56214",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineBucketDeploymentAwsCliLayerAA1BBC13": {
+ "Properties": {
+ "Content": {
+ "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ "S3Key": "arbitrary-file.ext",
+ },
+ "Description": "/opt/awscli/aws",
+ },
+ "Type": "AWS::Lambda::LayerVersion",
+ },
+ "EmbeddedLinuxCodePipelineBucketDeploymentCustomResourceBA39990C": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "DestinationBucketKeyPrefix": "poky",
+ "DestinationBucketName": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
+ },
+ "Extract": false,
+ "OutputObjectKeys": true,
+ "Prune": true,
+ "ServiceToken": {
+ "Fn::GetAtt": [
+ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536",
+ "Arn",
+ ],
+ },
+ "SourceBucketNames": [
+ "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ ],
+ "SourceObjectKeys": [
+ "arbitrary-file.ext",
+ ],
+ },
+ "Type": "Custom::CDKBucketDeployment",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "EmbeddedLinuxCodePipelineBucketDeploymentRoleC8070F49": {
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "Policies": [
+ {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "logs:CreateLogGroup",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ ],
+ "Effect": "Allow",
+ "Resource": "arn:aws:logs:eu-central-1:111111111111:log-group:/aws/lambda/EmbeddedLinuxCodePipelineBaseImage-CustomCDKBucketDeployment*",
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "pipelineSourceBucketDeploymentPolicy",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineBucketDeploymentRoleDefaultPolicy6C7ED123": {
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":s3:::cdk-hnb659fds-assets-111111111111-eu-central-1",
+ ],
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":s3:::cdk-hnb659fds-assets-111111111111-eu-central-1/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ "s3:PutObject",
+ "s3:PutObjectLegalHold",
+ "s3:PutObjectRetention",
+ "s3:PutObjectTagging",
+ "s3:PutObjectVersionTagging",
+ "s3:Abort*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineBucketDeploymentRoleDefaultPolicy6C7ED123",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineBucketDeploymentRoleC8070F49",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineBuildCodePipelineActionRoleDefaultPolicy44A54C9E": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "codebuild:BatchGetBuilds",
+ "codebuild:StartBuild",
+ "codebuild:StopBuild",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "Arn",
+ ],
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineBuildCodePipelineActionRoleDefaultPolicy44A54C9E",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineBuildCodePipelineActionRoleEE85AA1E",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineBuildCodePipelineActionRoleEE85AA1E": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":iam::111111111111:root",
+ ],
+ ],
+ },
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineBuildProjectSecurityGroup35690F9F": {
+ "Properties": {
+ "GroupDescription": "Security Group to allow attaching EFS",
+ "SecurityGroupEgress": [
+ {
+ "CidrIp": "0.0.0.0/0",
+ "Description": "Allow all outbound traffic by default",
+ "IpProtocol": "-1",
+ },
+ ],
+ "SecurityGroupIngress": [
+ {
+ "CidrIp": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesVpc54FB4A02CidrBlock1B329233",
+ },
+ "Description": "NFS Mount Port",
+ "FromPort": 2049,
+ "IpProtocol": "tcp",
+ "ToPort": 2049,
+ },
+ ],
+ "VpcId": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpc54FB4A0241E4C5E5",
+ },
+ },
+ "Type": "AWS::EC2::SecurityGroup",
+ },
+ "EmbeddedLinuxCodePipelineCheckOSAndStop8C4E93D6": {
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "codepipeline:StopCodePipelineExecution",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":codepipeline:eu-central-1:111111111111:",
+ {
+ "Ref": "EmbeddedLinuxCodePipeline4B3C7651",
+ },
+ ],
+ ],
+ },
+ },
+ {
+ "Action": "ecr:DescribeImages",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesECRRepositoryA0DB7EB6Arn5EC8487E",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineCheckOSAndStop8C4E93D6",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineOSImageCheckOnStartServiceRoleEBA0BE6A",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineEventsRole8EBF7C1D": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "events.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineEventsRoleDefaultPolicyF669575E": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "codepipeline:StartPipelineExecution",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":codepipeline:eu-central-1:111111111111:",
+ {
+ "Ref": "EmbeddedLinuxCodePipeline4B3C7651",
+ },
+ ],
+ ],
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineEventsRoleDefaultPolicyF669575E",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineEventsRole8EBF7C1D",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineFileSystemB969CAF1": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "Encrypted": true,
+ "FileSystemTags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/EmbeddedLinuxCodePipelineFileSystem",
+ },
+ ],
+ },
+ "Type": "AWS::EFS::FileSystem",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "EmbeddedLinuxCodePipelineFileSystemEfsMountTarget1CA0AA616": {
+ "Properties": {
+ "FileSystemId": {
+ "Ref": "EmbeddedLinuxCodePipelineFileSystemB969CAF1",
+ },
+ "SecurityGroups": [
+ {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineFileSystemEfsSecurityGroup35971CF1",
+ "GroupId",
+ ],
+ },
+ ],
+ "SubnetId": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet1Subnet8DD627A684935C4B",
+ },
+ },
+ "Type": "AWS::EFS::MountTarget",
+ },
+ "EmbeddedLinuxCodePipelineFileSystemEfsMountTarget24B554859": {
+ "Properties": {
+ "FileSystemId": {
+ "Ref": "EmbeddedLinuxCodePipelineFileSystemB969CAF1",
+ },
+ "SecurityGroups": [
+ {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineFileSystemEfsSecurityGroup35971CF1",
+ "GroupId",
+ ],
+ },
+ ],
+ "SubnetId": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet2SubnetC1071C9093652F10",
+ },
+ },
+ "Type": "AWS::EFS::MountTarget",
+ },
+ "EmbeddedLinuxCodePipelineFileSystemEfsMountTarget3FAD334C7": {
+ "Properties": {
+ "FileSystemId": {
+ "Ref": "EmbeddedLinuxCodePipelineFileSystemB969CAF1",
+ },
+ "SecurityGroups": [
+ {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineFileSystemEfsSecurityGroup35971CF1",
+ "GroupId",
+ ],
+ },
+ ],
+ "SubnetId": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet3SubnetCA196C90FDAFF9BF",
+ },
+ },
+ "Type": "AWS::EFS::MountTarget",
+ },
+ "EmbeddedLinuxCodePipelineFileSystemEfsSecurityGroup35971CF1": {
+ "Properties": {
+ "GroupDescription": "MyTestStack/EmbeddedLinuxCodePipelineFileSystem/EfsSecurityGroup",
+ "SecurityGroupEgress": [
+ {
+ "CidrIp": "0.0.0.0/0",
+ "Description": "Allow all outbound traffic by default",
+ "IpProtocol": "-1",
+ },
+ ],
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/EmbeddedLinuxCodePipelineFileSystem",
+ },
+ ],
+ "VpcId": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpc54FB4A0241E4C5E5",
+ },
+ },
+ "Type": "AWS::EC2::SecurityGroup",
+ },
+ "EmbeddedLinuxCodePipelineFileSystemEfsSecurityGroupfromMyTestStackEmbeddedLinuxCodePipelineBuildProjectSecurityGroupEA21757F2049FC93D5D2": {
+ "Properties": {
+ "Description": "from MyTestStackEmbeddedLinuxCodePipelineBuildProjectSecurityGroupEA21757F:2049",
+ "FromPort": 2049,
+ "GroupId": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineFileSystemEfsSecurityGroup35971CF1",
+ "GroupId",
+ ],
+ },
+ "IpProtocol": "tcp",
+ "SourceSecurityGroupId": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineBuildProjectSecurityGroup35690F9F",
+ "GroupId",
+ ],
+ },
+ "ToPort": 2049,
+ },
+ "Type": "AWS::EC2::SecurityGroupIngress",
+ },
+ "EmbeddedLinuxCodePipelineMyTestStackEmbeddedLinuxCodePipelineE5C7D172SourceEventRulepokyf48cd2a94def24552abdd5b6ef9ffe6137be08fbc49a17964c6f7cae81245d5dzipEC68B3DA": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "EventPattern": {
+ "detail": {
+ "eventName": [
+ "CompleteMultipartUpload",
+ "CopyObject",
+ "PutObject",
+ ],
+ "requestParameters": {
+ "bucketName": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesSourceBucket1FA488F54AA73B60",
+ },
+ ],
+ "key": [
+ "poky/arbitrary-file.ext",
+ ],
+ },
+ "resources": {
+ "ARN": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
+ },
+ "/poky/arbitrary-file.ext",
+ ],
+ ],
+ },
+ ],
+ },
+ },
+ "detail-type": [
+ "AWS API Call via CloudTrail",
+ ],
+ "source": [
+ "aws.s3",
+ ],
+ },
+ "State": "ENABLED",
+ "Targets": [
+ {
+ "Arn": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":codepipeline:eu-central-1:111111111111:",
+ {
+ "Ref": "EmbeddedLinuxCodePipeline4B3C7651",
+ },
+ ],
+ ],
+ },
+ "Id": "Target0",
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineEventsRole8EBF7C1D",
+ "Arn",
+ ],
+ },
+ },
+ ],
+ },
+ "Type": "AWS::Events::Rule",
+ },
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStart9461FE82": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStartServiceRoleEBA0BE6A",
+ ],
+ "Properties": {
+ "Code": {
+ "ZipFile": {
+ "Fn::Join": [
+ "",
+ [
+ "
+ import boto3
+ import json
+
+ ecr_client = boto3.client('ecr')
+ codepipeline_client = boto3.client('codepipeline')
+
+ def handler(event, context):
+ print("Received event: " + json.dumps(event, indent=2))
+ response = ecr_client.describe_images(repositoryName='",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesECRRepositoryA0DB7EB625EEF25E",
+ },
+ "', filter={'tagStatus': 'TAGGED'})
+ for i in response['imageDetails']:
+ if 'MyBaseImageStack' in i['ecrRepositoryImageTags']:
+ break
+ else:
+ print('OS image not found. Stopping execution.')
+ response = codepipeline_client.stop_pipeline_execution(
+ pipelineName=event['detail']['pipeline'],
+ pipelineExecutionId=event['detail']['execution-id'],
+ abandon=True,
+ reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
+ ",
+ ],
+ ],
+ },
+ },
+ "Handler": "index.handler",
+ "Role": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStartServiceRoleEBA0BE6A",
+ "Arn",
+ ],
+ },
+ "Runtime": "python3.10",
+ },
+ "Type": "AWS::Lambda::Function",
+ },
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStartLogRetentionF9BA1BAC": {
+ "Properties": {
+ "LogGroupName": {
+ "Fn::Join": [
+ "",
+ [
+ "/aws/lambda/",
+ {
+ "Ref": "EmbeddedLinuxCodePipelineOSImageCheckOnStart9461FE82",
+ },
+ ],
+ ],
+ },
+ "RetentionInDays": 365,
+ "ServiceToken": {
+ "Fn::GetAtt": [
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
+ "Arn",
+ ],
+ },
+ },
+ "Type": "Custom::LogRetention",
+ },
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStartServiceRoleEBA0BE6A": {
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
+ ],
+ ],
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineOnCodePipelineStartRule0A57D4C5": {
+ "Properties": {
+ "EventPattern": {
+ "detail": {
+ "execution-trigger": {
+ "trigger-type": [
+ "CreateCodePipeline",
+ ],
+ },
+ "state": [
+ "STARTED",
+ ],
+ },
+ "detail-type": [
+ "CodeCodePipeline CodePipeline Execution State Change",
+ ],
+ "source": [
+ "aws.codepipeline",
+ ],
+ },
+ "State": "ENABLED",
+ "Targets": [
+ {
+ "Arn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStart9461FE82",
+ "Arn",
+ ],
+ },
+ "Id": "Target0",
+ },
+ ],
+ },
+ "Type": "AWS::Events::Rule",
+ },
+ "EmbeddedLinuxCodePipelineOnCodePipelineStartRuleAllowEventRuleMyTestStackEmbeddedLinuxCodePipelineOSImageCheckOnStartADCB57EA531B1926": {
+ "Properties": {
+ "Action": "lambda:InvokeFunction",
+ "FunctionName": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineOSImageCheckOnStart9461FE82",
+ "Arn",
+ ],
+ },
+ "Principal": "events.amazonaws.com",
+ "SourceArn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineOnCodePipelineStartRule0A57D4C5",
+ "Arn",
+ ],
+ },
+ },
+ "Type": "AWS::Lambda::Permission",
+ },
+ "EmbeddedLinuxCodePipelineProjectF55E3B36": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineBucketDeploymentAwsCliLayerAA1BBC13",
+ "EmbeddedLinuxCodePipelineBucketDeploymentCustomResourceBA39990C",
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ ],
+ "Properties": {
+ "Artifacts": {
+ "Type": "CODEPIPELINE",
+ },
+ "Cache": {
+ "Type": "NO_CACHE",
+ },
+ "EncryptionKey": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ "Environment": {
+ "ComputeType": "BUILD_GENERAL1_XLARGE",
+ "EnvironmentVariables": [
+ {
+ "Name": "AWS_ACCOUNT_ID",
+ "Type": "PLAINTEXT",
+ "Value": "111111111111",
+ },
+ {
+ "Name": "AWS_DEFAULT_REGION",
+ "Type": "PLAINTEXT",
+ "Value": "eu-central-1",
+ },
+ {
+ "Name": "PIPELINE_PROJECT_NAME",
+ "Type": "PLAINTEXT",
+ "Value": "MyTestStack",
+ },
+ {
+ "Name": "PIPELINE_OUTPUT_BUCKET",
+ "Type": "PLAINTEXT",
+ "Value": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesOutputBucketA2144F25070A0F1C",
+ },
+ },
+ {
+ "Name": "PIPELINE_OUTPUT_BUCKET_PREFIX",
+ "Type": "PLAINTEXT",
+ "Value": "poky",
+ },
+ {
+ "Name": "VM_IMPORT_ROLE",
+ "Type": "PLAINTEXT",
+ "Value": {
+ "Ref": "EmbeddedLinuxCodePipelineVMImportRole68B53DB4",
+ },
+ },
+ ],
+ "Image": {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::Select": [
+ 4,
+ {
+ "Fn::Split": [
+ ":",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesECRRepositoryA0DB7EB6Arn5EC8487E",
+ },
+ ],
+ },
+ ],
+ },
+ ".dkr.ecr.",
+ {
+ "Fn::Select": [
+ 3,
+ {
+ "Fn::Split": [
+ ":",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesECRRepositoryA0DB7EB6Arn5EC8487E",
+ },
+ ],
+ },
+ ],
+ },
+ ".",
+ {
+ "Ref": "AWS::URLSuffix",
+ },
+ "/",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesECRRepositoryA0DB7EB625EEF25E",
+ },
+ ":MyBaseImageStack",
+ ],
+ ],
+ },
+ "ImagePullCredentialsType": "SERVICE_ROLE",
+ "PrivilegedMode": true,
+ "Type": "LINUX_CONTAINER",
+ },
+ "FileSystemLocations": [
+ {
+ "Identifier": "nfs",
+ "Location": {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineFileSystemB969CAF1",
+ },
+ ".efs.eu-central-1.amazonaws.com:/",
+ ],
+ ],
+ },
+ "MountPoint": "/nfs",
+ "Type": "EFS",
+ },
+ ],
+ "LogsConfig": {
+ "CloudWatchLogs": {
+ "GroupName": {
+ "Ref": "EmbeddedLinuxCodePipelineProjectLogsBA5DB55C",
+ },
+ "Status": "ENABLED",
+ },
+ },
+ "Name": "MyTestStack",
+ "ServiceRole": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ "Arn",
+ ],
+ },
+ "Source": {
+ "BuildSpec": "build.buildspec.yml",
+ "Type": "CODEPIPELINE",
+ },
+ "TimeoutInMinutes": 240,
+ "VpcConfig": {
+ "SecurityGroupIds": [
+ {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineBuildProjectSecurityGroup35690F9F",
+ "GroupId",
+ ],
+ },
+ ],
+ "Subnets": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet1Subnet8DD627A684935C4B",
+ },
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet2SubnetC1071C9093652F10",
+ },
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet3SubnetCA196C90FDAFF9BF",
+ },
+ ],
+ "VpcId": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpc54FB4A0241E4C5E5",
+ },
+ },
+ },
+ "Type": "AWS::CodeBuild::Project",
+ },
+ "EmbeddedLinuxCodePipelineProjectLogsBA5DB55C": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "LogGroupName": "MyTestStack-EmbeddedLinuxCodePipelineProjectLogs",
+ "RetentionInDays": 365,
+ },
+ "Type": "AWS::Logs::LogGroup",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineBucketDeploymentAwsCliLayerAA1BBC13",
+ "EmbeddedLinuxCodePipelineBucketDeploymentCustomResourceBA39990C",
+ ],
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "ec2:CreateNetworkInterface",
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:DeleteNetworkInterface",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeDhcpOptions",
+ "ec2:DescribeVpcs",
+ ],
+ "Effect": "Allow",
+ "Resource": "*",
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineBucketDeploymentAwsCliLayerAA1BBC13",
+ "EmbeddedLinuxCodePipelineBucketDeploymentCustomResourceBA39990C",
+ ],
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "ecr:BatchCheckLayerAvailability",
+ "ecr:GetDownloadUrlForLayer",
+ "ecr:BatchGetImage",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesECRRepositoryA0DB7EB6Arn5EC8487E",
+ },
+ },
+ {
+ "Action": "ecr:GetAuthorizationToken",
+ "Effect": "Allow",
+ "Resource": "*",
+ },
+ {
+ "Action": [
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineProjectLogsBA5DB55C",
+ "Arn",
+ ],
+ },
+ },
+ {
+ "Action": "ec2:CreateNetworkInterfacePermission",
+ "Condition": {
+ "StringEquals": {
+ "ec2:AuthorizedService": "codebuild.amazonaws.com",
+ "ec2:Subnet": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":ec2:",
+ {
+ "Ref": "AWS::Region",
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId",
+ },
+ ":subnet/",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet1Subnet8DD627A684935C4B",
+ },
+ ],
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":ec2:",
+ {
+ "Ref": "AWS::Region",
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId",
+ },
+ ":subnet/",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet2SubnetC1071C9093652F10",
+ },
+ ],
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":ec2:",
+ {
+ "Ref": "AWS::Region",
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId",
+ },
+ ":subnet/",
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputRefPipelineResourcesVpcPrivateSubnet3SubnetCA196C90FDAFF9BF",
+ },
+ ],
+ ],
+ },
+ ],
+ },
+ },
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":ec2:",
+ {
+ "Ref": "AWS::Region",
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId",
+ },
+ ":network-interface/*",
+ ],
+ ],
+ },
+ },
+ {
+ "Action": [
+ "logs:CreateLogGroup",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":logs:eu-central-1:111111111111:log-group:/aws/codebuild/",
+ {
+ "Ref": "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ },
+ ],
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":logs:eu-central-1:111111111111:log-group:/aws/codebuild/",
+ {
+ "Ref": "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ },
+ ":*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "codebuild:CreateReportGroup",
+ "codebuild:CreateReport",
+ "codebuild:UpdateReport",
+ "codebuild:BatchPutTestCases",
+ "codebuild:BatchPutCodeCoverages",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":codebuild:eu-central-1:111111111111:report-group/",
+ {
+ "Ref": "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ },
+ "-*",
+ ],
+ ],
+ },
+ },
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ {
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ "s3:PutObject",
+ "s3:PutObjectLegalHold",
+ "s3:PutObjectRetention",
+ "s3:PutObjectTagging",
+ "s3:PutObjectVersionTagging",
+ "s3:Abort*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesOutputBucketA2144F25ArnBAEF4928",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesOutputBucketA2144F25ArnBAEF4928",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ {
+ "Action": [
+ "ec2:CreateImage",
+ "ec2:CreateTags",
+ "ec2:DescribeImages",
+ "ec2:DescribeSnapshots",
+ "ec2:DescribeImportSnapshotTasks",
+ "ec2:DescribeTags",
+ "ec2:CancelImportTask",
+ ],
+ "Effect": "Allow",
+ "Resource": "*",
+ },
+ {
+ "Action": "ec2:ImportSnapshot",
+ "Effect": "Allow",
+ "Resource": [
+ "arn:aws:ec2:eu-central-1:111111111111:import-snapshot-task/*",
+ "arn:aws:ec2:eu-central-1::snapshot/*",
+ ],
+ },
+ {
+ "Action": [
+ "s3:GetObject",
+ "s3:ListBucket",
+ "s3:PutObject",
+ "s3:PutObjectTagging",
+ "s3:AbortMultipartUpload",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesOutputBucketA2144F25ArnBAEF4928",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesOutputBucketA2144F25ArnBAEF4928",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "ec2:RegisterImage",
+ "ec2:DeregisterImage",
+ "ec2:CreateStoreImageTask",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ "arn:aws:ec2:eu-central-1::image/*",
+ "arn:aws:ec2:eu-central-1::snapshot/snap-*",
+ ],
+ },
+ {
+ "Action": [
+ "ebs:CompleteSnapshot",
+ "ebs:GetSnapshotBlock",
+ "ebs:ListChangedBlocks",
+ "ebs:ListSnapshotBlocks",
+ "ebs:PutSnapshotBlock",
+ ],
+ "Effect": "Allow",
+ "Resource": "arn:aws:ec2:eu-central-1::snapshot/*",
+ },
+ {
+ "Action": [
+ "ec2:DescribeStoreImageTasks",
+ "ec2:GetEbsEncryptionByDefault",
+ ],
+ "Effect": "Allow",
+ "Resource": "*",
+ },
+ {
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ "s3:PutObject",
+ "s3:PutObjectLegalHold",
+ "s3:PutObjectRetention",
+ "s3:PutObjectTagging",
+ "s3:PutObjectVersionTagging",
+ "s3:Abort*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineBucketDeploymentAwsCliLayerAA1BBC13",
+ "EmbeddedLinuxCodePipelineBucketDeploymentCustomResourceBA39990C",
+ ],
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "codebuild.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineRole784D6893": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "codepipeline.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineRoleDefaultPolicy8CDA8ACC": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ "s3:PutObject",
+ "s3:PutObjectLegalHold",
+ "s3:PutObjectRetention",
+ "s3:PutObjectTagging",
+ "s3:PutObjectVersionTagging",
+ "s3:Abort*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineSourceCodePipelineActionRole1B690AB7",
+ "Arn",
+ ],
+ },
+ },
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineBuildCodePipelineActionRoleEE85AA1E",
+ "Arn",
+ ],
+ },
+ },
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineArtifactCodePipelineActionRole97F56214",
+ "Arn",
+ ],
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineRoleDefaultPolicy8CDA8ACC",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineRole784D6893",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineSourceCodePipelineActionRole1B690AB7": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":iam::111111111111:root",
+ ],
+ ],
+ },
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineSourceCodePipelineActionRoleDefaultPolicy2FB1A568": {
+ "DependsOn": [
+ "EmbeddedLinuxCodePipelineProjectPolicyDocument1FA633EB",
+ "EmbeddedLinuxCodePipelineProjectF55E3B36",
+ "EmbeddedLinuxCodePipelineProjectRoleDefaultPolicyC205FC16",
+ "EmbeddedLinuxCodePipelineProjectRoleFD913DB7",
+ ],
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "s3:GetObject*",
+ "s3:GetBucket*",
+ "s3:List*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesSourceBucket1FA488F5Arn3CF62A69",
+ },
+ "/poky/arbitrary-file.ext",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ {
+ "Action": [
+ "s3:DeleteObject*",
+ "s3:PutObject",
+ "s3:PutObjectLegalHold",
+ "s3:PutObjectRetention",
+ "s3:PutObjectTagging",
+ "s3:PutObjectVersionTagging",
+ "s3:Abort*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactBucketFF61EB98Arn7A6F2306",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ "kms:Decrypt",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "EmbeddedLinuxCodePipelineSourceCodePipelineActionRoleDefaultPolicy2FB1A568",
+ "Roles": [
+ {
+ "Ref": "EmbeddedLinuxCodePipelineSourceCodePipelineActionRole1B690AB7",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "EmbeddedLinuxCodePipelineVMImportRole68B53DB4": {
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Condition": {
+ "StringEquals": {
+ "sts:ExternalId": "vmimport",
+ },
+ },
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "vmie.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "Policies": [
+ {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "s3:GetBucketLocation",
+ "s3:GetObject",
+ "s3:ListBucket",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesOutputBucketA2144F25ArnBAEF4928",
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesOutputBucketA2144F25ArnBAEF4928",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "ec2:CreateTags",
+ "ec2:DescribeTags",
+ ],
+ "Condition": {
+ "StringEquals": {
+ "ec2:ResourceTag/CreatedBy": [
+ "MyTestStack",
+ ],
+ },
+ },
+ "Effect": "Allow",
+ "Resource": "*",
+ },
+ {
+ "Action": "ec2:CopySnapshot",
+ "Effect": "Allow",
+ "Resource": "arn:aws:ec2:eu-central-1::snapshot/*",
+ },
+ {
+ "Action": "ec2:DescribeSnapshots",
+ "Effect": "Allow",
+ "Resource": "*",
+ },
+ {
+ "Action": [
+ "kms:CreateGrant",
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:GenerateDataKeyWithoutPlaintext",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::ImportValue": "MyResourceStack:ExportsOutputFnGetAttPipelineResourcesArtifactKey368D3018Arn0E784876",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "vmImportPolicy",
+ },
+ ],
+ "RoleName": "MyTestStack-vm-mport",
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "EmbeddedLinuxCodePipelineWeeklyRefreshSchedule47F3A27D": {
+ "Properties": {
+ "ScheduleExpression": "cron(0 6 ? * Tuesday *)",
+ "State": "ENABLED",
+ "Targets": [
+ {
+ "Arn": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":codepipeline:eu-central-1:111111111111:",
+ {
+ "Ref": "EmbeddedLinuxCodePipeline4B3C7651",
+ },
+ ],
+ ],
+ },
+ "Id": "Target0",
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "EmbeddedLinuxCodePipelineEventsRole8EBF7C1D",
+ "Arn",
+ ],
+ },
+ },
+ ],
+ },
+ "Type": "AWS::Events::Rule",
+ },
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": {
+ "DependsOn": [
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
+ ],
+ "Properties": {
+ "Code": {
+ "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ "S3Key": "arbitrary-file.ext",
+ },
+ "Handler": "index.handler",
+ "Role": {
+ "Fn::GetAtt": [
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
+ "Arn",
+ ],
+ },
+ "Runtime": "nodejs20.x",
+ "Timeout": 900,
+ },
+ "Type": "AWS::Lambda::Function",
+ },
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": {
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
+ ],
+ ],
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": {
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "logs:PutRetentionPolicy",
+ "logs:DeleteRetentionPolicy",
+ ],
+ "Effect": "Allow",
+ "Resource": "*",
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
+ "Roles": [
+ {
+ "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ },
+ "Rules": {
+ "CheckBootstrapVersion": {
+ "Assertions": [
+ {
+ "Assert": {
+ "Fn::Not": [
+ {
+ "Fn::Contains": [
+ [
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ ],
+ {
+ "Ref": "BootstrapVersion",
+ },
+ ],
+ },
+ ],
+ },
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
+ },
+ ],
+ },
+ },
+}
+`;
diff --git a/test/__snapshots__/codepipeline-resources.test.ts.snap b/test/__snapshots__/codepipeline-resources.test.ts.snap
new file mode 100644
index 0000000..78df388
--- /dev/null
+++ b/test/__snapshots__/codepipeline-resources.test.ts.snap
@@ -0,0 +1,1376 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`PipelineResourcesStack Snapshot 1`] = `
+{
+ "Outputs": {
+ "ArtifactBucket": {
+ "Description": "The artifact bucket.",
+ "Value": {
+ "Ref": "PipelineResourcesArtifactBucketFF61EB98",
+ },
+ },
+ "LoggingBucket": {
+ "Description": "The access logging bucket.",
+ "Value": {
+ "Ref": "PipelineResourcesLoggingBucketD957F175",
+ },
+ },
+ "OutputBucket": {
+ "Description": "The output bucket.",
+ "Value": {
+ "Ref": "PipelineResourcesOutputBucketA2144F25",
+ },
+ },
+ "SourceBucket": {
+ "Description": "The source bucket.",
+ "Value": {
+ "Ref": "PipelineResourcesSourceBucket1FA488F5",
+ },
+ },
+ },
+ "Parameters": {
+ "BootstrapVersion": {
+ "Default": "/cdk-bootstrap/hnb659fds/version",
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
+ "Type": "AWS::SSM::Parameter::Value",
+ },
+ },
+ "Resources": {
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
+ "DependsOn": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
+ ],
+ "Properties": {
+ "Code": {
+ "S3Bucket": "cdk-hnb659fds-assets-111111111111-eu-central-1",
+ "S3Key": "arbitrary-file.ext",
+ },
+ "Description": {
+ "Fn::Join": [
+ "",
+ [
+ "Lambda function for auto-deleting objects in ",
+ {
+ "Ref": "PipelineResourcesLoggingBucketD957F175",
+ },
+ " S3 bucket.",
+ ],
+ ],
+ },
+ "Handler": "index.handler",
+ "MemorySize": 128,
+ "Role": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
+ "Arn",
+ ],
+ },
+ "Runtime": "nodejs20.x",
+ "Timeout": 900,
+ },
+ "Type": "AWS::Lambda::Function",
+ },
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "PipelineResourcesArtifactBucketAutoDeleteObjectsCustomResource92CEB6DD": {
+ "DeletionPolicy": "Delete",
+ "DependsOn": [
+ "PipelineResourcesArtifactBucketPolicy41E82DF1",
+ ],
+ "Properties": {
+ "BucketName": {
+ "Ref": "PipelineResourcesArtifactBucketFF61EB98",
+ },
+ "ServiceToken": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
+ "Arn",
+ ],
+ },
+ },
+ "Type": "Custom::S3AutoDeleteObjects",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesArtifactBucketFF61EB98": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "BucketEncryption": {
+ "ServerSideEncryptionConfiguration": [
+ {
+ "ServerSideEncryptionByDefault": {
+ "KMSMasterKeyID": {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactKey368D3018",
+ "Arn",
+ ],
+ },
+ "SSEAlgorithm": "aws:kms",
+ },
+ },
+ ],
+ },
+ "BucketName": "test-111111111111-eu-central-1-artifact",
+ "LoggingConfiguration": {
+ "DestinationBucketName": {
+ "Ref": "PipelineResourcesLoggingBucketD957F175",
+ },
+ "LogFilePrefix": "artifact-bucket",
+ },
+ "Tags": [
+ {
+ "Key": "aws-cdk:auto-delete-objects",
+ "Value": "true",
+ },
+ ],
+ "VersioningConfiguration": {
+ "Status": "Enabled",
+ },
+ },
+ "Type": "AWS::S3::Bucket",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesArtifactBucketPolicy41E82DF1": {
+ "Properties": {
+ "Bucket": {
+ "Ref": "PipelineResourcesArtifactBucketFF61EB98",
+ },
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "s3:*",
+ "Condition": {
+ "Bool": {
+ "aws:SecureTransport": "false",
+ },
+ },
+ "Effect": "Deny",
+ "Principal": {
+ "AWS": "*",
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactBucketFF61EB98",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactBucketFF61EB98",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "s3:PutBucketPolicy",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
+ "Arn",
+ ],
+ },
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactBucketFF61EB98",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactBucketFF61EB98",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::S3::BucketPolicy",
+ },
+ "PipelineResourcesArtifactKey368D3018": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "EnableKeyRotation": true,
+ "KeyPolicy": {
+ "Statement": [
+ {
+ "Action": "kms:*",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition",
+ },
+ ":iam::111111111111:root",
+ ],
+ ],
+ },
+ },
+ "Resource": "*",
+ },
+ {
+ "Action": [
+ "kms:Decrypt",
+ "kms:Encrypt",
+ "kms:ReEncrypt*",
+ "kms:GenerateDataKey*",
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "logging.s3.amazonaws.com",
+ },
+ "Resource": "*",
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::KMS::Key",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesECRRepositoryA0DB7EB6": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "EmptyOnDelete": true,
+ "RepositoryName": "test-111111111111-eu-central-1-repo",
+ },
+ "Type": "AWS::ECR::Repository",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesLoggingBucketAutoDeleteObjectsCustomResource17381FC7": {
+ "DeletionPolicy": "Delete",
+ "DependsOn": [
+ "PipelineResourcesLoggingBucketPolicy520659AE",
+ ],
+ "Properties": {
+ "BucketName": {
+ "Ref": "PipelineResourcesLoggingBucketD957F175",
+ },
+ "ServiceToken": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
+ "Arn",
+ ],
+ },
+ },
+ "Type": "Custom::S3AutoDeleteObjects",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesLoggingBucketD957F175": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "AccessControl": "LogDeliveryWrite",
+ "BucketEncryption": {
+ "ServerSideEncryptionConfiguration": [
+ {
+ "ServerSideEncryptionByDefault": {
+ "KMSMasterKeyID": {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactKey368D3018",
+ "Arn",
+ ],
+ },
+ "SSEAlgorithm": "aws:kms",
+ },
+ },
+ ],
+ },
+ "BucketName": "test-111111111111-eu-central-1-logs",
+ "OwnershipControls": {
+ "Rules": [
+ {
+ "ObjectOwnership": "ObjectWriter",
+ },
+ ],
+ },
+ "Tags": [
+ {
+ "Key": "aws-cdk:auto-delete-objects",
+ "Value": "true",
+ },
+ ],
+ "VersioningConfiguration": {
+ "Status": "Enabled",
+ },
+ },
+ "Type": "AWS::S3::Bucket",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesLoggingBucketPolicy520659AE": {
+ "Properties": {
+ "Bucket": {
+ "Ref": "PipelineResourcesLoggingBucketD957F175",
+ },
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "s3:*",
+ "Condition": {
+ "Bool": {
+ "aws:SecureTransport": "false",
+ },
+ },
+ "Effect": "Deny",
+ "Principal": {
+ "AWS": "*",
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesLoggingBucketD957F175",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesLoggingBucketD957F175",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "s3:PutBucketPolicy",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
+ "Arn",
+ ],
+ },
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesLoggingBucketD957F175",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesLoggingBucketD957F175",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::S3::BucketPolicy",
+ },
+ "PipelineResourcesOutputBucketA2144F25": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "BucketEncryption": {
+ "ServerSideEncryptionConfiguration": [
+ {
+ "ServerSideEncryptionByDefault": {
+ "KMSMasterKeyID": {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactKey368D3018",
+ "Arn",
+ ],
+ },
+ "SSEAlgorithm": "aws:kms",
+ },
+ },
+ ],
+ },
+ "BucketName": "test-111111111111-eu-central-1-output",
+ "LoggingConfiguration": {
+ "DestinationBucketName": {
+ "Ref": "PipelineResourcesLoggingBucketD957F175",
+ },
+ "LogFilePrefix": "output-bucket",
+ },
+ "Tags": [
+ {
+ "Key": "aws-cdk:auto-delete-objects",
+ "Value": "true",
+ },
+ ],
+ "VersioningConfiguration": {
+ "Status": "Enabled",
+ },
+ },
+ "Type": "AWS::S3::Bucket",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesOutputBucketAutoDeleteObjectsCustomResource5A511D2C": {
+ "DeletionPolicy": "Delete",
+ "DependsOn": [
+ "PipelineResourcesOutputBucketPolicyAE7D91E7",
+ ],
+ "Properties": {
+ "BucketName": {
+ "Ref": "PipelineResourcesOutputBucketA2144F25",
+ },
+ "ServiceToken": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
+ "Arn",
+ ],
+ },
+ },
+ "Type": "Custom::S3AutoDeleteObjects",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesOutputBucketPolicyAE7D91E7": {
+ "Properties": {
+ "Bucket": {
+ "Ref": "PipelineResourcesOutputBucketA2144F25",
+ },
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "s3:*",
+ "Condition": {
+ "Bool": {
+ "aws:SecureTransport": "false",
+ },
+ },
+ "Effect": "Deny",
+ "Principal": {
+ "AWS": "*",
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesOutputBucketA2144F25",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesOutputBucketA2144F25",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "s3:PutBucketPolicy",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
+ "Arn",
+ ],
+ },
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesOutputBucketA2144F25",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesOutputBucketA2144F25",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::S3::BucketPolicy",
+ },
+ "PipelineResourcesSourceBucket1FA488F5": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "BucketEncryption": {
+ "ServerSideEncryptionConfiguration": [
+ {
+ "ServerSideEncryptionByDefault": {
+ "KMSMasterKeyID": {
+ "Fn::GetAtt": [
+ "PipelineResourcesArtifactKey368D3018",
+ "Arn",
+ ],
+ },
+ "SSEAlgorithm": "aws:kms",
+ },
+ },
+ ],
+ },
+ "BucketName": "test-111111111111-eu-central-1-source",
+ "LoggingConfiguration": {
+ "DestinationBucketName": {
+ "Ref": "PipelineResourcesLoggingBucketD957F175",
+ },
+ "LogFilePrefix": "source-bucket",
+ },
+ "Tags": [
+ {
+ "Key": "aws-cdk:auto-delete-objects",
+ "Value": "true",
+ },
+ ],
+ "VersioningConfiguration": {
+ "Status": "Enabled",
+ },
+ },
+ "Type": "AWS::S3::Bucket",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesSourceBucketAutoDeleteObjectsCustomResourceD6504155": {
+ "DeletionPolicy": "Delete",
+ "DependsOn": [
+ "PipelineResourcesSourceBucketPolicyE537B0E0",
+ ],
+ "Properties": {
+ "BucketName": {
+ "Ref": "PipelineResourcesSourceBucket1FA488F5",
+ },
+ "ServiceToken": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
+ "Arn",
+ ],
+ },
+ },
+ "Type": "Custom::S3AutoDeleteObjects",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesSourceBucketPolicyE537B0E0": {
+ "Properties": {
+ "Bucket": {
+ "Ref": "PipelineResourcesSourceBucket1FA488F5",
+ },
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "s3:*",
+ "Condition": {
+ "Bool": {
+ "aws:SecureTransport": "false",
+ },
+ },
+ "Effect": "Deny",
+ "Principal": {
+ "AWS": "*",
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesSourceBucket1FA488F5",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesSourceBucket1FA488F5",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ {
+ "Action": [
+ "s3:PutBucketPolicy",
+ "s3:GetBucket*",
+ "s3:List*",
+ "s3:DeleteObject*",
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": {
+ "Fn::GetAtt": [
+ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
+ "Arn",
+ ],
+ },
+ },
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesSourceBucket1FA488F5",
+ "Arn",
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "PipelineResourcesSourceBucket1FA488F5",
+ "Arn",
+ ],
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ },
+ "Type": "AWS::S3::BucketPolicy",
+ },
+ "PipelineResourcesVPCFlowLogGroupCCF3042F": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "LogGroupName": "MyTestStack-PipelineResourcesVPCFlowLogGroup",
+ "RetentionInDays": 365,
+ },
+ "Type": "AWS::Logs::LogGroup",
+ "UpdateReplacePolicy": "Delete",
+ },
+ "PipelineResourcesVPCFlowLogsFlowLogDCC98C23": {
+ "Properties": {
+ "DeliverLogsPermissionArn": {
+ "Fn::GetAtt": [
+ "PipelineResourcesVPCFlowLogsIAMRoleD4BD5FD0",
+ "Arn",
+ ],
+ },
+ "LogDestinationType": "cloud-watch-logs",
+ "LogGroupName": {
+ "Ref": "PipelineResourcesVPCFlowLogGroupCCF3042F",
+ },
+ "ResourceId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ "ResourceType": "VPC",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVPCFlowLogs",
+ },
+ ],
+ "TrafficType": "ALL",
+ },
+ "Type": "AWS::EC2::FlowLog",
+ },
+ "PipelineResourcesVPCFlowLogsIAMRoleD4BD5FD0": {
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "vpc-flow-logs.amazonaws.com",
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVPCFlowLogs",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Role",
+ },
+ "PipelineResourcesVPCFlowLogsIAMRoleDefaultPolicy6A6D03E1": {
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ "logs:DescribeLogStreams",
+ ],
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "PipelineResourcesVPCFlowLogGroupCCF3042F",
+ "Arn",
+ ],
+ },
+ },
+ {
+ "Action": "iam:PassRole",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "PipelineResourcesVPCFlowLogsIAMRoleD4BD5FD0",
+ "Arn",
+ ],
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "PipelineResourcesVPCFlowLogsIAMRoleDefaultPolicy6A6D03E1",
+ "Roles": [
+ {
+ "Ref": "PipelineResourcesVPCFlowLogsIAMRoleD4BD5FD0",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ },
+ "PipelineResourcesVpc54FB4A02": {
+ "Properties": {
+ "CidrBlock": "10.0.0.0/16",
+ "EnableDnsHostnames": true,
+ "EnableDnsSupport": true,
+ "InstanceTenancy": "default",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::VPC",
+ },
+ "PipelineResourcesVpcIGW375CBF19": {
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::InternetGateway",
+ },
+ "PipelineResourcesVpcPrivateSubnet1DefaultRoute4C73C54F": {
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet1NATGateway9B71CD07",
+ },
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet1RouteTable42958689",
+ },
+ },
+ "Type": "AWS::EC2::Route",
+ },
+ "PipelineResourcesVpcPrivateSubnet1RouteTable42958689": {
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PrivateSubnet1",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::RouteTable",
+ },
+ "PipelineResourcesVpcPrivateSubnet1RouteTableAssociationC7ED7464": {
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet1RouteTable42958689",
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet1Subnet8DD627A6",
+ },
+ },
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ },
+ "PipelineResourcesVpcPrivateSubnet1Subnet8DD627A6": {
+ "Properties": {
+ "AvailabilityZone": "dummy1a",
+ "CidrBlock": "10.0.96.0/19",
+ "MapPublicIpOnLaunch": false,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Private",
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Private",
+ },
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PrivateSubnet1",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::Subnet",
+ },
+ "PipelineResourcesVpcPrivateSubnet2DefaultRouteB1EEA4A3": {
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet2NATGateway655DC282",
+ },
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet2RouteTableBA14AB02",
+ },
+ },
+ "Type": "AWS::EC2::Route",
+ },
+ "PipelineResourcesVpcPrivateSubnet2RouteTableAssociation9DEF6A48": {
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet2RouteTableBA14AB02",
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet2SubnetC1071C90",
+ },
+ },
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ },
+ "PipelineResourcesVpcPrivateSubnet2RouteTableBA14AB02": {
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PrivateSubnet2",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::RouteTable",
+ },
+ "PipelineResourcesVpcPrivateSubnet2SubnetC1071C90": {
+ "Properties": {
+ "AvailabilityZone": "dummy1b",
+ "CidrBlock": "10.0.128.0/19",
+ "MapPublicIpOnLaunch": false,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Private",
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Private",
+ },
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PrivateSubnet2",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::Subnet",
+ },
+ "PipelineResourcesVpcPrivateSubnet3DefaultRoute12E7DE69": {
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet3NATGatewayE3DAD508",
+ },
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet3RouteTable6A1E641C",
+ },
+ },
+ "Type": "AWS::EC2::Route",
+ },
+ "PipelineResourcesVpcPrivateSubnet3RouteTable6A1E641C": {
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PrivateSubnet3",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::RouteTable",
+ },
+ "PipelineResourcesVpcPrivateSubnet3RouteTableAssociationACAD4730": {
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet3RouteTable6A1E641C",
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPrivateSubnet3SubnetCA196C90",
+ },
+ },
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ },
+ "PipelineResourcesVpcPrivateSubnet3SubnetCA196C90": {
+ "Properties": {
+ "AvailabilityZone": "dummy1c",
+ "CidrBlock": "10.0.160.0/19",
+ "MapPublicIpOnLaunch": false,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Private",
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Private",
+ },
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PrivateSubnet3",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::Subnet",
+ },
+ "PipelineResourcesVpcPublicSubnet1DefaultRouteEC2ED518": {
+ "DependsOn": [
+ "PipelineResourcesVpcVPCGWD5E21195",
+ ],
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "GatewayId": {
+ "Ref": "PipelineResourcesVpcIGW375CBF19",
+ },
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet1RouteTable31D009BE",
+ },
+ },
+ "Type": "AWS::EC2::Route",
+ },
+ "PipelineResourcesVpcPublicSubnet1EIPAA3A3298": {
+ "Properties": {
+ "Domain": "vpc",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet1",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::EIP",
+ },
+ "PipelineResourcesVpcPublicSubnet1NATGateway9B71CD07": {
+ "DependsOn": [
+ "PipelineResourcesVpcPublicSubnet1DefaultRouteEC2ED518",
+ "PipelineResourcesVpcPublicSubnet1RouteTableAssociation20C8242F",
+ ],
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "PipelineResourcesVpcPublicSubnet1EIPAA3A3298",
+ "AllocationId",
+ ],
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet1SubnetF8A80437",
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet1",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::NatGateway",
+ },
+ "PipelineResourcesVpcPublicSubnet1RouteTable31D009BE": {
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet1",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::RouteTable",
+ },
+ "PipelineResourcesVpcPublicSubnet1RouteTableAssociation20C8242F": {
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet1RouteTable31D009BE",
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet1SubnetF8A80437",
+ },
+ },
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ },
+ "PipelineResourcesVpcPublicSubnet1SubnetF8A80437": {
+ "Properties": {
+ "AvailabilityZone": "dummy1a",
+ "CidrBlock": "10.0.0.0/19",
+ "MapPublicIpOnLaunch": true,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Public",
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Public",
+ },
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet1",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::Subnet",
+ },
+ "PipelineResourcesVpcPublicSubnet2DefaultRoute3E8F0AD0": {
+ "DependsOn": [
+ "PipelineResourcesVpcVPCGWD5E21195",
+ ],
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "GatewayId": {
+ "Ref": "PipelineResourcesVpcIGW375CBF19",
+ },
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet2RouteTable3F256387",
+ },
+ },
+ "Type": "AWS::EC2::Route",
+ },
+ "PipelineResourcesVpcPublicSubnet2EIPD5CF8B49": {
+ "Properties": {
+ "Domain": "vpc",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet2",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::EIP",
+ },
+ "PipelineResourcesVpcPublicSubnet2NATGateway655DC282": {
+ "DependsOn": [
+ "PipelineResourcesVpcPublicSubnet2DefaultRoute3E8F0AD0",
+ "PipelineResourcesVpcPublicSubnet2RouteTableAssociation6F2523EC",
+ ],
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "PipelineResourcesVpcPublicSubnet2EIPD5CF8B49",
+ "AllocationId",
+ ],
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet2SubnetB9638D82",
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet2",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::NatGateway",
+ },
+ "PipelineResourcesVpcPublicSubnet2RouteTable3F256387": {
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet2",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::RouteTable",
+ },
+ "PipelineResourcesVpcPublicSubnet2RouteTableAssociation6F2523EC": {
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet2RouteTable3F256387",
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet2SubnetB9638D82",
+ },
+ },
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ },
+ "PipelineResourcesVpcPublicSubnet2SubnetB9638D82": {
+ "Properties": {
+ "AvailabilityZone": "dummy1b",
+ "CidrBlock": "10.0.32.0/19",
+ "MapPublicIpOnLaunch": true,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Public",
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Public",
+ },
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet2",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::Subnet",
+ },
+ "PipelineResourcesVpcPublicSubnet3DefaultRoute9ED6D279": {
+ "DependsOn": [
+ "PipelineResourcesVpcVPCGWD5E21195",
+ ],
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "GatewayId": {
+ "Ref": "PipelineResourcesVpcIGW375CBF19",
+ },
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet3RouteTableB8C2FF69",
+ },
+ },
+ "Type": "AWS::EC2::Route",
+ },
+ "PipelineResourcesVpcPublicSubnet3EIPF7259271": {
+ "Properties": {
+ "Domain": "vpc",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet3",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::EIP",
+ },
+ "PipelineResourcesVpcPublicSubnet3NATGatewayE3DAD508": {
+ "DependsOn": [
+ "PipelineResourcesVpcPublicSubnet3DefaultRoute9ED6D279",
+ "PipelineResourcesVpcPublicSubnet3RouteTableAssociationA597E9BD",
+ ],
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "PipelineResourcesVpcPublicSubnet3EIPF7259271",
+ "AllocationId",
+ ],
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet3Subnet154058BD",
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet3",
+ },
+ ],
+ },
+ "Type": "AWS::EC2::NatGateway",
+ },
+ "PipelineResourcesVpcPublicSubnet3RouteTableAssociationA597E9BD": {
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet3RouteTableB8C2FF69",
+ },
+ "SubnetId": {
+ "Ref": "PipelineResourcesVpcPublicSubnet3Subnet154058BD",
+ },
+ },
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ },
+ "PipelineResourcesVpcPublicSubnet3RouteTableB8C2FF69": {
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet3",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::RouteTable",
+ },
+ "PipelineResourcesVpcPublicSubnet3Subnet154058BD": {
+ "Properties": {
+ "AvailabilityZone": "dummy1c",
+ "CidrBlock": "10.0.64.0/19",
+ "MapPublicIpOnLaunch": true,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Public",
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Public",
+ },
+ {
+ "Key": "Name",
+ "Value": "MyTestStack/PipelineResourcesVpc/PublicSubnet3",
+ },
+ ],
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::Subnet",
+ },
+ "PipelineResourcesVpcVPCGWD5E21195": {
+ "Properties": {
+ "InternetGatewayId": {
+ "Ref": "PipelineResourcesVpcIGW375CBF19",
+ },
+ "VpcId": {
+ "Ref": "PipelineResourcesVpc54FB4A02",
+ },
+ },
+ "Type": "AWS::EC2::VPCGatewayAttachment",
+ },
+ },
+ "Rules": {
+ "CheckBootstrapVersion": {
+ "Assertions": [
+ {
+ "Assert": {
+ "Fn::Not": [
+ {
+ "Fn::Contains": [
+ [
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ ],
+ {
+ "Ref": "BootstrapVersion",
+ },
+ ],
+ },
+ ],
+ },
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
+ },
+ ],
+ },
+ },
+}
+`;
diff --git a/test/__snapshots__/embedded-linux-pipeline.test.ts.snap b/test/__snapshots__/embedded-linux-pipeline.test.ts.snap
deleted file mode 100644
index f1f29b4..0000000
--- a/test/__snapshots__/embedded-linux-pipeline.test.ts.snap
+++ /dev/null
@@ -1,7805 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Pipeline Poky AMI Pipeline - check role name trim 1`] = `
-{
- "Outputs": {
- "BuildOutput": {
- "Description": "The output bucket of this pipeline.",
- "Value": {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- },
- },
- "Parameters": {
- "BootstrapVersion": {
- "Default": "/cdk-bootstrap/hnb659fds/version",
- "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
- "Type": "AWS::SSM::Parameter::Value",
- },
- },
- "Resources": {
- "ArtifactAccessLoggingAutoDeleteObjectsCustomResourceD9DFD1B2": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "ArtifactAccessLoggingPolicyDC97CE59",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "ArtifactAccessLoggingD6FCABA3": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "AccessControl": "LogDeliveryWrite",
- "OwnershipControls": {
- "Rules": [
- {
- "ObjectOwnership": "ObjectWriter",
- },
- ],
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "ArtifactAccessLoggingPolicyDC97CE59": {
- "Properties": {
- "Bucket": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "BuildProjectSecurityGroup28D27668": {
- "Properties": {
- "GroupDescription": "Security Group to allow attaching EFS",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "SecurityGroupIngress": [
- {
- "CidrIp": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttBucket83908E77CidrBlockD1D303CF",
- },
- "Description": "NFS Mount Port",
- "FromPort": 2049,
- "IpProtocol": "tcp",
- "ToPort": 2049,
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "CheckOSAndStop224E880C": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "codepipeline:StopPipelineExecution",
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- },
- {
- "Action": "ecr:DescribeImages",
- "Effect": "Allow",
- "Resource": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "CheckOSAndStop224E880C",
- "Roles": [
- {
- "Ref": "OSImageCheckOnStartServiceRole2D11D1E2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
- "DependsOn": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "S3Key": "arbitrary-file.ext",
- },
- "Description": {
- "Fn::Join": [
- "",
- [
- "Lambda function for auto-deleting objects in ",
- {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- " S3 bucket.",
- ],
- ],
- },
- "Handler": "index.handler",
- "MemorySize": 128,
- "Role": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxBuildProject45760157": {
- "DependsOn": [
- "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9",
- ],
- "Properties": {
- "Artifacts": {
- "Type": "CODEPIPELINE",
- },
- "Cache": {
- "Type": "NO_CACHE",
- },
- "EncryptionKey": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "Environment": {
- "ComputeType": "BUILD_GENERAL1_2XLARGE",
- "EnvironmentVariables": [
- {
- "Name": "IMPORT_BUCKET",
- "Type": "PLAINTEXT",
- "Value": {
- "Ref": "PipelineOutput78594CB5",
- },
- },
- {
- "Name": "ROLE_NAME",
- "Type": "PLAINTEXT",
- "Value": {
- "Ref": "VMImportRoleAC246CAD",
- },
- },
- {
- "Name": "SCRIPT_URL",
- "Type": "PLAINTEXT",
- "Value": "s3://cdk-hnb659fds-assets-12341234-eu-central-1/arbitrary-file.ext",
- },
- ],
- "Image": {
- "Fn::Join": [
- "",
- [
- {
- "Fn::Select": [
- 4,
- {
- "Fn::Split": [
- ":",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- ],
- },
- ],
- },
- ".dkr.ecr.",
- {
- "Fn::Select": [
- 3,
- {
- "Fn::Split": [
- ":",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- ],
- },
- ],
- },
- ".",
- {
- "Ref": "AWS::URLSuffix",
- },
- "/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefRepository22E53BBD9A9E013B",
- },
- ":latest",
- ],
- ],
- },
- "ImagePullCredentialsType": "SERVICE_ROLE",
- "PrivilegedMode": true,
- "Type": "LINUX_CONTAINER",
- },
- "FileSystemLocations": [
- {
- "Identifier": "tmp_dir",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/build-output",
- "Type": "EFS",
- },
- {
- "Identifier": "sstate_cache",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/sstate-cache",
- "Type": "EFS",
- },
- {
- "Identifier": "dl_dir",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/downloads",
- "Type": "EFS",
- },
- ],
- "LogsConfig": {
- "CloudWatchLogs": {
- "GroupName": {
- "Ref": "PipelineBuildLogs0533272F",
- },
- "Status": "ENABLED",
- },
- },
- "ServiceRole": {
- "Fn::GetAtt": [
- "EmbeddedLinuxBuildProjectRole4EBABAB2",
- "Arn",
- ],
- },
- "Source": {
- "BuildSpec": "build.buildspec.yml",
- "Type": "CODEPIPELINE",
- },
- "TimeoutInMinutes": 240,
- "VpcConfig": {
- "SecurityGroupIds": [
- {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- ],
- "Subnets": [
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- },
- "Type": "AWS::CodeBuild::Project",
- },
- "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "ec2:CreateNetworkInterface",
- "ec2:DescribeNetworkInterfaces",
- "ec2:DeleteNetworkInterface",
- "ec2:DescribeSubnets",
- "ec2:DescribeSecurityGroups",
- "ec2:DescribeDhcpOptions",
- "ec2:DescribeVpcs",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxBuildProjectRole4EBABAB2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxBuildProjectRole4EBABAB2": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "codebuild.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxBuildProjectRoleDefaultPolicy59C0930B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "ecr:BatchCheckLayerAvailability",
- "ecr:GetDownloadUrlForLayer",
- "ecr:BatchGetImage",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- },
- {
- "Action": "ecr:GetAuthorizationToken",
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": [
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineBuildLogs0533272F",
- "Arn",
- ],
- },
- },
- {
- "Action": "ec2:CreateNetworkInterfacePermission",
- "Condition": {
- "StringEquals": {
- "ec2:AuthorizedService": "codebuild.amazonaws.com",
- "ec2:Subnet": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- ],
- ],
- },
- ],
- },
- },
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":network-interface/*",
- ],
- ],
- },
- },
- {
- "Action": [
- "logs:CreateLogGroup",
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":logs:eu-central-1:12341234:log-group:/aws/codebuild/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":logs:eu-central-1:12341234:log-group:/aws/codebuild/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- ":*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "codebuild:CreateReportGroup",
- "codebuild:CreateReport",
- "codebuild:UpdateReport",
- "codebuild:BatchPutTestCases",
- "codebuild:BatchPutCodeCoverages",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codebuild:eu-central-1:12341234:report-group/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- "-*",
- ],
- ],
- },
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "ec2:CreateImage",
- "ec2:CreateTags",
- "ec2:DescribeImages",
- "ec2:DescribeSnapshots",
- "ec2:DescribeImportSnapshotTasks",
- "ec2:DescribeTags",
- "ec2:CancelImportTask",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": "ec2:ImportSnapshot",
- "Effect": "Allow",
- "Resource": [
- "arn:aws:ec2:eu-central-1:12341234:import-snapshot-task/*",
- "arn:aws:ec2:eu-central-1::snapshot/*",
- ],
- },
- {
- "Action": [
- "s3:GetObject",
- "s3:ListBucket",
- "s3:PutObject",
- "s3:PutObjectTagging",
- "s3:AbortMultipartUpload",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "ec2:RegisterImage",
- "ec2:DeregisterImage",
- "ec2:CreateStoreImageTask",
- ],
- "Effect": "Allow",
- "Resource": [
- "arn:aws:ec2:eu-central-1::image/*",
- "arn:aws:ec2:eu-central-1::snapshot/snap-*",
- ],
- },
- {
- "Action": [
- "ebs:CompleteSnapshot",
- "ebs:GetSnapshotBlock",
- "ebs:ListChangedBlocks",
- "ebs:ListSnapshotBlocks",
- "ebs:PutSnapshotBlock",
- ],
- "Effect": "Allow",
- "Resource": "arn:aws:ec2:eu-central-1::snapshot/*",
- },
- {
- "Action": [
- "ec2:DescribeStoreImageTasks",
- "ec2:GetEbsEncryptionByDefault",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":s3:::cdk-hnb659fds-assets-12341234-eu-central-1",
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":s3:::cdk-hnb659fds-assets-12341234-eu-central-1/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": "codecommit:GitPull",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxBuildProjectRoleDefaultPolicy59C0930B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxBuildProjectRole4EBABAB2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipeline1DDFB4FE": {
- "DependsOn": [
- "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9",
- "EmbeddedLinuxPipelineRole1094A815",
- ],
- "Properties": {
- "ArtifactStore": {
- "EncryptionKey": {
- "Id": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "Type": "KMS",
- },
- "Location": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "Type": "S3",
- },
- "PipelineType": "V1",
- "RestartExecutionOnUpdate": true,
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineRole1094A815",
- "Arn",
- ],
- },
- "Stages": [
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Source",
- "Owner": "AWS",
- "Provider": "CodeCommit",
- "Version": "1",
- },
- "Configuration": {
- "BranchName": "main",
- "OutputArtifactFormat": "CODEBUILD_CLONE_REF",
- "PollForSourceChanges": false,
- "RepositoryName": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Name",
- ],
- },
- },
- "Name": "Source",
- "OutputArtifacts": [
- {
- "Name": "Artifact_Source_Source",
- },
- ],
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Source",
- },
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Build",
- "Owner": "AWS",
- "Provider": "CodeBuild",
- "Version": "1",
- },
- "Configuration": {
- "ProjectName": {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- },
- "InputArtifacts": [
- {
- "Name": "Artifact_Source_Source",
- },
- ],
- "Name": "Build",
- "OutputArtifacts": [
- {
- "Name": "Artifact_Build_Build",
- },
- ],
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Build",
- },
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Deploy",
- "Owner": "AWS",
- "Provider": "S3",
- "Version": "1",
- },
- "Configuration": {
- "BucketName": {
- "Ref": "PipelineOutput78594CB5",
- },
- "Extract": "true",
- },
- "InputArtifacts": [
- {
- "Name": "Artifact_Build_Build",
- },
- ],
- "Name": "Artifact",
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Artifact",
- },
- ],
- },
- "Type": "AWS::CodePipeline::Pipeline",
- },
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRoleDefaultPolicyD75CCCBC": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- "kms:Decrypt",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineArtifactCodePipelineActionRoleDefaultPolicyD75CCCBC",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleDefaultPolicy176F5E4B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "codebuild:BatchGetBuilds",
- "codebuild:StartBuild",
- "codebuild:StopBuild",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxBuildProject45760157",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineBuildCodePipelineActionRoleDefaultPolicy176F5E4B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystem1772812C": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineDownloadsFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget1CA5C8C01": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget2BC3B1054": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget3C062C6FF": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38": {
- "Properties": {
- "GroupDescription": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineDownloadsFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineDownloadsFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroupfromPokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992BuildProjectSecurityGroup1FC90CF5204930D27033": {
- "Properties": {
- "Description": "from PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992BuildProjectSecurityGroup1FC90CF5:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "EmbeddedLinuxPipelineEventsRoleDefaultPolicy7234197B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "codepipeline:StartPipelineExecution",
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineEventsRoleDefaultPolicy7234197B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineEventsRoleF9DA96F1",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineEventsRoleF9DA96F1": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "events.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineRole1094A815": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "codepipeline.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineRole1094A815",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineSStateFilesystem36BA2630": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineSStateFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget15401AFF6": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget25BFCAE34": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget347551AC1": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2": {
- "Properties": {
- "GroupDescription": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineSStateFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineSStateFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroupfromPokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992BuildProjectSecurityGroup1FC90CF5204976011793": {
- "Properties": {
- "Description": "from PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992BuildProjectSecurityGroup1FC90CF5:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleDefaultPolicyE4783D85": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "codecommit:GetBranch",
- "codecommit:GetCommit",
- "codecommit:UploadArchive",
- "codecommit:GetUploadArchiveStatus",
- "codecommit:CancelUploadArchive",
- "codecommit:GetRepository",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineSourceCodePipelineActionRoleDefaultPolicyE4783D85",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineTempFilesystem8ECAD602": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineTempFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget1C1FB920C": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget240F5557C": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget31EDABBCB": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213": {
- "Properties": {
- "GroupDescription": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineTempFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992/EmbeddedLinuxPipelineTempFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupfromPokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992BuildProjectSecurityGroup1FC90CF520495E3C3DB5": {
- "Properties": {
- "Description": "from PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992BuildProjectSecurityGroup1FC90CF5:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": {
- "DependsOn": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "S3Key": "arbitrary-file.ext",
- },
- "Handler": "index.handler",
- "Role": {
- "Fn::GetAtt": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- ],
- ],
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "logs:PutRetentionPolicy",
- "logs:DeleteRetentionPolicy",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
- "Roles": [
- {
- "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "OSImageCheckOnStart0C599B99": {
- "DependsOn": [
- "OSImageCheckOnStartServiceRole2D11D1E2",
- ],
- "Properties": {
- "Code": {
- "ZipFile": {
- "Fn::Join": [
- "",
- [
- "
-import boto3
-import json
-
-ecr_client = boto3.client('ecr')
-codepipeline_client = boto3.client('codepipeline')
-
-def handler(event, context):
- print("Received event: " + json.dumps(event, indent=2))
- response = ecr_client.describe_images(repositoryName='",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefRepository22E53BBD9A9E013B",
- },
- "', filter={'tagStatus': 'TAGGED'})
- for i in response['imageDetails']:
- if 'undefined' in i['imageTags']:
- break
- else:
- print('OS image not found. Stopping execution.')
- response = codepipeline_client.stop_pipeline_execution(
- pipelineName=event['detail']['pipeline'],
- pipelineExecutionId=event['detail']['execution-id'],
- abandon=True,
- reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
- ",
- ],
- ],
- },
- },
- "Handler": "index.handler",
- "Role": {
- "Fn::GetAtt": [
- "OSImageCheckOnStartServiceRole2D11D1E2",
- "Arn",
- ],
- },
- "Runtime": "python3.10",
- },
- "Type": "AWS::Lambda::Function",
- },
- "OSImageCheckOnStartLogRetention2E659F28": {
- "Properties": {
- "LogGroupName": {
- "Fn::Join": [
- "",
- [
- "/aws/lambda/",
- {
- "Ref": "OSImageCheckOnStart0C599B99",
- },
- ],
- ],
- },
- "RetentionInDays": 3653,
- "ServiceToken": {
- "Fn::GetAtt": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
- "Arn",
- ],
- },
- },
- "Type": "Custom::LogRetention",
- },
- "OSImageCheckOnStartServiceRole2D11D1E2": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- ],
- ],
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "OnPipelineStartRuleAllowEventRulePokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992OSImageCheckOnStartFD79EDB4E0B2CA41": {
- "Properties": {
- "Action": "lambda:InvokeFunction",
- "FunctionName": {
- "Fn::GetAtt": [
- "OSImageCheckOnStart0C599B99",
- "Arn",
- ],
- },
- "Principal": "events.amazonaws.com",
- "SourceArn": {
- "Fn::GetAtt": [
- "OnPipelineStartRuleC732FFCF",
- "Arn",
- ],
- },
- },
- "Type": "AWS::Lambda::Permission",
- },
- "OnPipelineStartRuleC732FFCF": {
- "Properties": {
- "EventPattern": {
- "detail": {
- "execution-trigger": {
- "trigger-type": [
- "CreatePipeline",
- ],
- },
- "state": [
- "STARTED",
- ],
- },
- "detail-type": [
- "CodePipeline Pipeline Execution State Change",
- ],
- "source": [
- "aws.codepipeline",
- ],
- },
- "State": "ENABLED",
- "Targets": [
- {
- "Arn": {
- "Fn::GetAtt": [
- "OSImageCheckOnStart0C599B99",
- "Arn",
- ],
- },
- "Id": "Target0",
- },
- ],
- },
- "Type": "AWS::Events::Rule",
- },
- "OutputBucketEncryptionKey0E569549": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EnableKeyRotation": true,
- "KeyPolicy": {
- "Statement": [
- {
- "Action": "kms:*",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::KMS::Key",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactKeyEC0C0075": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EnableKeyRotation": true,
- "KeyPolicy": {
- "Statement": [
- {
- "Action": "kms:*",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::KMS::Key",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifacts4A9B2621": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "BucketEncryption": {
- "ServerSideEncryptionConfiguration": [
- {
- "ServerSideEncryptionByDefault": {
- "KMSMasterKeyID": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "SSEAlgorithm": "aws:kms",
- },
- },
- ],
- },
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- },
- "PublicAccessBlockConfiguration": {
- "BlockPublicAcls": true,
- "BlockPublicPolicy": true,
- "IgnorePublicAcls": true,
- "RestrictPublicBuckets": true,
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsAutoDeleteObjectsCustomResourceFEF48A36": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "PipelineArtifactsPolicy87787A0D",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsPolicy87787A0D": {
- "Properties": {
- "Bucket": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "PipelineBuildLogs0533272F": {
- "DeletionPolicy": "Retain",
- "Properties": {
- "RetentionInDays": 3653,
- },
- "Type": "AWS::Logs::LogGroup",
- "UpdateReplacePolicy": "Retain",
- },
- "PipelineOutput78594CB5": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "BucketEncryption": {
- "ServerSideEncryptionConfiguration": [
- {
- "ServerSideEncryptionByDefault": {
- "KMSMasterKeyID": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- "SSEAlgorithm": "aws:kms",
- },
- },
- ],
- },
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineOutputAutoDeleteObjectsCustomResourceF3013510": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "PipelineOutputPolicyCB4CC2E6",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "PipelineOutput78594CB5",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineOutputPolicyCB4CC2E6": {
- "Properties": {
- "Bucket": {
- "Ref": "PipelineOutput78594CB5",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "SourceRepoSourceRepositoryC86045A8": {
- "Properties": {
- "Code": {
- "BranchName": "main",
- "S3": {
- "Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "Key": "arbitrary-file.ext",
- },
- },
- "RepositoryName": "layer-repo-PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992",
- },
- "Type": "AWS::CodeCommit::Repository",
- },
- "SourceRepoSourceRepositoryPokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992EmbeddedLinuxPipeline27218C26mainEventRuleA20329DD": {
- "Properties": {
- "EventPattern": {
- "detail": {
- "event": [
- "referenceCreated",
- "referenceUpdated",
- ],
- "referenceName": [
- "main",
- ],
- },
- "detail-type": [
- "CodeCommit Repository State Change",
- ],
- "resources": [
- {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- ],
- "source": [
- "aws.codecommit",
- ],
- },
- "State": "ENABLED",
- "Targets": [
- {
- "Arn": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- "Id": "Target0",
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineEventsRoleF9DA96F1",
- "Arn",
- ],
- },
- },
- ],
- },
- "Type": "AWS::Events::Rule",
- },
- "VMImportRoleAC246CAD": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Condition": {
- "StringEquals": {
- "sts:ExternalId": "vmimport",
- },
- },
- "Effect": "Allow",
- "Principal": {
- "Service": "vmie.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "Policies": [
- {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetBucketLocation",
- "s3:GetObject",
- "s3:ListBucket",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "ec2:CreateTags",
- "ec2:DescribeTags",
- ],
- "Condition": {
- "StringEquals": {
- "ec2:ResourceTag/CreatedBy": [
- "aws4embeddedlinux-ci",
- ],
- },
- },
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": "ec2:CopySnapshot",
- "Effect": "Allow",
- "Resource": "arn:aws:ec2:eu-central-1::snapshot/*",
- },
- {
- "Action": "ec2:DescribeSnapshots",
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": [
- "kms:CreateGrant",
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:GenerateDataKeyWithoutPlaintext",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "importPolicy",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- },
- "Rules": {
- "CheckBootstrapVersion": {
- "Assertions": [
- {
- "Assert": {
- "Fn::Not": [
- {
- "Fn::Contains": [
- [
- "1",
- "2",
- "3",
- "4",
- "5",
- ],
- {
- "Ref": "BootstrapVersion",
- },
- ],
- },
- ],
- },
- "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
- },
- ],
- },
- },
-}
-`;
-
-exports[`Pipeline Snapshot Poky AMI Pipeline 1`] = `
-{
- "Outputs": {
- "BuildOutput": {
- "Description": "The output bucket of this pipeline.",
- "Value": {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- },
- },
- "Parameters": {
- "BootstrapVersion": {
- "Default": "/cdk-bootstrap/hnb659fds/version",
- "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
- "Type": "AWS::SSM::Parameter::Value",
- },
- },
- "Resources": {
- "ArtifactAccessLoggingAutoDeleteObjectsCustomResourceD9DFD1B2": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "ArtifactAccessLoggingPolicyDC97CE59",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "ArtifactAccessLoggingD6FCABA3": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "AccessControl": "LogDeliveryWrite",
- "OwnershipControls": {
- "Rules": [
- {
- "ObjectOwnership": "ObjectWriter",
- },
- ],
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "ArtifactAccessLoggingPolicyDC97CE59": {
- "Properties": {
- "Bucket": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "BuildProjectSecurityGroup28D27668": {
- "Properties": {
- "GroupDescription": "Security Group to allow attaching EFS",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "SecurityGroupIngress": [
- {
- "CidrIp": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttBucket83908E77CidrBlockD1D303CF",
- },
- "Description": "NFS Mount Port",
- "FromPort": 2049,
- "IpProtocol": "tcp",
- "ToPort": 2049,
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "CheckOSAndStop224E880C": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "codepipeline:StopPipelineExecution",
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- },
- {
- "Action": "ecr:DescribeImages",
- "Effect": "Allow",
- "Resource": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "CheckOSAndStop224E880C",
- "Roles": [
- {
- "Ref": "OSImageCheckOnStartServiceRole2D11D1E2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
- "DependsOn": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "S3Key": "arbitrary-file.ext",
- },
- "Description": {
- "Fn::Join": [
- "",
- [
- "Lambda function for auto-deleting objects in ",
- {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- " S3 bucket.",
- ],
- ],
- },
- "Handler": "index.handler",
- "MemorySize": 128,
- "Role": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxBuildProject45760157": {
- "DependsOn": [
- "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9",
- ],
- "Properties": {
- "Artifacts": {
- "Type": "CODEPIPELINE",
- },
- "Cache": {
- "Type": "NO_CACHE",
- },
- "EncryptionKey": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "Environment": {
- "ComputeType": "BUILD_GENERAL1_2XLARGE",
- "EnvironmentVariables": [
- {
- "Name": "IMPORT_BUCKET",
- "Type": "PLAINTEXT",
- "Value": {
- "Ref": "PipelineOutput78594CB5",
- },
- },
- {
- "Name": "ROLE_NAME",
- "Type": "PLAINTEXT",
- "Value": {
- "Ref": "VMImportRoleAC246CAD",
- },
- },
- {
- "Name": "SCRIPT_URL",
- "Type": "PLAINTEXT",
- "Value": "s3://cdk-hnb659fds-assets-12341234-eu-central-1/arbitrary-file.ext",
- },
- ],
- "Image": {
- "Fn::Join": [
- "",
- [
- {
- "Fn::Select": [
- 4,
- {
- "Fn::Split": [
- ":",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- ],
- },
- ],
- },
- ".dkr.ecr.",
- {
- "Fn::Select": [
- 3,
- {
- "Fn::Split": [
- ":",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- ],
- },
- ],
- },
- ".",
- {
- "Ref": "AWS::URLSuffix",
- },
- "/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefRepository22E53BBD9A9E013B",
- },
- ":latest",
- ],
- ],
- },
- "ImagePullCredentialsType": "SERVICE_ROLE",
- "PrivilegedMode": true,
- "Type": "LINUX_CONTAINER",
- },
- "FileSystemLocations": [
- {
- "Identifier": "tmp_dir",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/build-output",
- "Type": "EFS",
- },
- {
- "Identifier": "sstate_cache",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/sstate-cache",
- "Type": "EFS",
- },
- {
- "Identifier": "dl_dir",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/downloads",
- "Type": "EFS",
- },
- ],
- "LogsConfig": {
- "CloudWatchLogs": {
- "GroupName": {
- "Ref": "PipelineBuildLogs0533272F",
- },
- "Status": "ENABLED",
- },
- },
- "ServiceRole": {
- "Fn::GetAtt": [
- "EmbeddedLinuxBuildProjectRole4EBABAB2",
- "Arn",
- ],
- },
- "Source": {
- "BuildSpec": "build.buildspec.yml",
- "Type": "CODEPIPELINE",
- },
- "TimeoutInMinutes": 240,
- "VpcConfig": {
- "SecurityGroupIds": [
- {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- ],
- "Subnets": [
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- },
- "Type": "AWS::CodeBuild::Project",
- },
- "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "ec2:CreateNetworkInterface",
- "ec2:DescribeNetworkInterfaces",
- "ec2:DeleteNetworkInterface",
- "ec2:DescribeSubnets",
- "ec2:DescribeSecurityGroups",
- "ec2:DescribeDhcpOptions",
- "ec2:DescribeVpcs",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxBuildProjectRole4EBABAB2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxBuildProjectRole4EBABAB2": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "codebuild.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxBuildProjectRoleDefaultPolicy59C0930B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "ecr:BatchCheckLayerAvailability",
- "ecr:GetDownloadUrlForLayer",
- "ecr:BatchGetImage",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- },
- {
- "Action": "ecr:GetAuthorizationToken",
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": [
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineBuildLogs0533272F",
- "Arn",
- ],
- },
- },
- {
- "Action": "ec2:CreateNetworkInterfacePermission",
- "Condition": {
- "StringEquals": {
- "ec2:AuthorizedService": "codebuild.amazonaws.com",
- "ec2:Subnet": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- ],
- ],
- },
- ],
- },
- },
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":network-interface/*",
- ],
- ],
- },
- },
- {
- "Action": [
- "logs:CreateLogGroup",
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":logs:eu-central-1:12341234:log-group:/aws/codebuild/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":logs:eu-central-1:12341234:log-group:/aws/codebuild/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- ":*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "codebuild:CreateReportGroup",
- "codebuild:CreateReport",
- "codebuild:UpdateReport",
- "codebuild:BatchPutTestCases",
- "codebuild:BatchPutCodeCoverages",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codebuild:eu-central-1:12341234:report-group/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- "-*",
- ],
- ],
- },
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "ec2:CreateImage",
- "ec2:CreateTags",
- "ec2:DescribeImages",
- "ec2:DescribeSnapshots",
- "ec2:DescribeImportSnapshotTasks",
- "ec2:DescribeTags",
- "ec2:CancelImportTask",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": "ec2:ImportSnapshot",
- "Effect": "Allow",
- "Resource": [
- "arn:aws:ec2:eu-central-1:12341234:import-snapshot-task/*",
- "arn:aws:ec2:eu-central-1::snapshot/*",
- ],
- },
- {
- "Action": [
- "s3:GetObject",
- "s3:ListBucket",
- "s3:PutObject",
- "s3:PutObjectTagging",
- "s3:AbortMultipartUpload",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "ec2:RegisterImage",
- "ec2:DeregisterImage",
- "ec2:CreateStoreImageTask",
- ],
- "Effect": "Allow",
- "Resource": [
- "arn:aws:ec2:eu-central-1::image/*",
- "arn:aws:ec2:eu-central-1::snapshot/snap-*",
- ],
- },
- {
- "Action": [
- "ebs:CompleteSnapshot",
- "ebs:GetSnapshotBlock",
- "ebs:ListChangedBlocks",
- "ebs:ListSnapshotBlocks",
- "ebs:PutSnapshotBlock",
- ],
- "Effect": "Allow",
- "Resource": "arn:aws:ec2:eu-central-1::snapshot/*",
- },
- {
- "Action": [
- "ec2:DescribeStoreImageTasks",
- "ec2:GetEbsEncryptionByDefault",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":s3:::cdk-hnb659fds-assets-12341234-eu-central-1",
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":s3:::cdk-hnb659fds-assets-12341234-eu-central-1/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": "codecommit:GitPull",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxBuildProjectRoleDefaultPolicy59C0930B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxBuildProjectRole4EBABAB2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipeline1DDFB4FE": {
- "DependsOn": [
- "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9",
- "EmbeddedLinuxPipelineRole1094A815",
- ],
- "Properties": {
- "ArtifactStore": {
- "EncryptionKey": {
- "Id": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "Type": "KMS",
- },
- "Location": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "Type": "S3",
- },
- "PipelineType": "V1",
- "RestartExecutionOnUpdate": true,
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineRole1094A815",
- "Arn",
- ],
- },
- "Stages": [
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Source",
- "Owner": "AWS",
- "Provider": "CodeCommit",
- "Version": "1",
- },
- "Configuration": {
- "BranchName": "main",
- "OutputArtifactFormat": "CODEBUILD_CLONE_REF",
- "PollForSourceChanges": false,
- "RepositoryName": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Name",
- ],
- },
- },
- "Name": "Source",
- "OutputArtifacts": [
- {
- "Name": "Artifact_Source_Source",
- },
- ],
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Source",
- },
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Build",
- "Owner": "AWS",
- "Provider": "CodeBuild",
- "Version": "1",
- },
- "Configuration": {
- "ProjectName": {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- },
- "InputArtifacts": [
- {
- "Name": "Artifact_Source_Source",
- },
- ],
- "Name": "Build",
- "OutputArtifacts": [
- {
- "Name": "Artifact_Build_Build",
- },
- ],
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Build",
- },
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Deploy",
- "Owner": "AWS",
- "Provider": "S3",
- "Version": "1",
- },
- "Configuration": {
- "BucketName": {
- "Ref": "PipelineOutput78594CB5",
- },
- "Extract": "true",
- },
- "InputArtifacts": [
- {
- "Name": "Artifact_Build_Build",
- },
- ],
- "Name": "Artifact",
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Artifact",
- },
- ],
- },
- "Type": "AWS::CodePipeline::Pipeline",
- },
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRoleDefaultPolicyD75CCCBC": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- "kms:Decrypt",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineArtifactCodePipelineActionRoleDefaultPolicyD75CCCBC",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleDefaultPolicy176F5E4B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "codebuild:BatchGetBuilds",
- "codebuild:StartBuild",
- "codebuild:StopBuild",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxBuildProject45760157",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineBuildCodePipelineActionRoleDefaultPolicy176F5E4B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystem1772812C": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineDownloadsFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget1CA5C8C01": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget2BC3B1054": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget3C062C6FF": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38": {
- "Properties": {
- "GroupDescription": "MyTestStack/EmbeddedLinuxPipelineDownloadsFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineDownloadsFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroupfromMyTestStackBuildProjectSecurityGroupA374A3A920495E2D9CF2": {
- "Properties": {
- "Description": "from MyTestStackBuildProjectSecurityGroupA374A3A9:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "EmbeddedLinuxPipelineEventsRoleDefaultPolicy7234197B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "codepipeline:StartPipelineExecution",
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineEventsRoleDefaultPolicy7234197B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineEventsRoleF9DA96F1",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineEventsRoleF9DA96F1": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "events.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineRole1094A815": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "codepipeline.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineRole1094A815",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineSStateFilesystem36BA2630": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineSStateFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget15401AFF6": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget25BFCAE34": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget347551AC1": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2": {
- "Properties": {
- "GroupDescription": "MyTestStack/EmbeddedLinuxPipelineSStateFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineSStateFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroupfromMyTestStackBuildProjectSecurityGroupA374A3A92049D2B7AC43": {
- "Properties": {
- "Description": "from MyTestStackBuildProjectSecurityGroupA374A3A9:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleDefaultPolicyE4783D85": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "codecommit:GetBranch",
- "codecommit:GetCommit",
- "codecommit:UploadArchive",
- "codecommit:GetUploadArchiveStatus",
- "codecommit:CancelUploadArchive",
- "codecommit:GetRepository",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineSourceCodePipelineActionRoleDefaultPolicyE4783D85",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineTempFilesystem8ECAD602": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineTempFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget1C1FB920C": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget240F5557C": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget31EDABBCB": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213": {
- "Properties": {
- "GroupDescription": "MyTestStack/EmbeddedLinuxPipelineTempFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineTempFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupfromMyTestStackBuildProjectSecurityGroupA374A3A9204979E58A91": {
- "Properties": {
- "Description": "from MyTestStackBuildProjectSecurityGroupA374A3A9:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": {
- "DependsOn": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "S3Key": "arbitrary-file.ext",
- },
- "Handler": "index.handler",
- "Role": {
- "Fn::GetAtt": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- ],
- ],
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "logs:PutRetentionPolicy",
- "logs:DeleteRetentionPolicy",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
- "Roles": [
- {
- "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "OSImageCheckOnStart0C599B99": {
- "DependsOn": [
- "OSImageCheckOnStartServiceRole2D11D1E2",
- ],
- "Properties": {
- "Code": {
- "ZipFile": {
- "Fn::Join": [
- "",
- [
- "
-import boto3
-import json
-
-ecr_client = boto3.client('ecr')
-codepipeline_client = boto3.client('codepipeline')
-
-def handler(event, context):
- print("Received event: " + json.dumps(event, indent=2))
- response = ecr_client.describe_images(repositoryName='",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefRepository22E53BBD9A9E013B",
- },
- "', filter={'tagStatus': 'TAGGED'})
- for i in response['imageDetails']:
- if 'undefined' in i['imageTags']:
- break
- else:
- print('OS image not found. Stopping execution.')
- response = codepipeline_client.stop_pipeline_execution(
- pipelineName=event['detail']['pipeline'],
- pipelineExecutionId=event['detail']['execution-id'],
- abandon=True,
- reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
- ",
- ],
- ],
- },
- },
- "Handler": "index.handler",
- "Role": {
- "Fn::GetAtt": [
- "OSImageCheckOnStartServiceRole2D11D1E2",
- "Arn",
- ],
- },
- "Runtime": "python3.10",
- },
- "Type": "AWS::Lambda::Function",
- },
- "OSImageCheckOnStartLogRetention2E659F28": {
- "Properties": {
- "LogGroupName": {
- "Fn::Join": [
- "",
- [
- "/aws/lambda/",
- {
- "Ref": "OSImageCheckOnStart0C599B99",
- },
- ],
- ],
- },
- "RetentionInDays": 3653,
- "ServiceToken": {
- "Fn::GetAtt": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
- "Arn",
- ],
- },
- },
- "Type": "Custom::LogRetention",
- },
- "OSImageCheckOnStartServiceRole2D11D1E2": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- ],
- ],
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "OnPipelineStartRuleAllowEventRuleMyTestStackOSImageCheckOnStart16BFD20B7F872FCA": {
- "Properties": {
- "Action": "lambda:InvokeFunction",
- "FunctionName": {
- "Fn::GetAtt": [
- "OSImageCheckOnStart0C599B99",
- "Arn",
- ],
- },
- "Principal": "events.amazonaws.com",
- "SourceArn": {
- "Fn::GetAtt": [
- "OnPipelineStartRuleC732FFCF",
- "Arn",
- ],
- },
- },
- "Type": "AWS::Lambda::Permission",
- },
- "OnPipelineStartRuleC732FFCF": {
- "Properties": {
- "EventPattern": {
- "detail": {
- "execution-trigger": {
- "trigger-type": [
- "CreatePipeline",
- ],
- },
- "state": [
- "STARTED",
- ],
- },
- "detail-type": [
- "CodePipeline Pipeline Execution State Change",
- ],
- "source": [
- "aws.codepipeline",
- ],
- },
- "State": "ENABLED",
- "Targets": [
- {
- "Arn": {
- "Fn::GetAtt": [
- "OSImageCheckOnStart0C599B99",
- "Arn",
- ],
- },
- "Id": "Target0",
- },
- ],
- },
- "Type": "AWS::Events::Rule",
- },
- "OutputBucketEncryptionKey0E569549": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EnableKeyRotation": true,
- "KeyPolicy": {
- "Statement": [
- {
- "Action": "kms:*",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::KMS::Key",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactKeyEC0C0075": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EnableKeyRotation": true,
- "KeyPolicy": {
- "Statement": [
- {
- "Action": "kms:*",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::KMS::Key",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifacts4A9B2621": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "BucketEncryption": {
- "ServerSideEncryptionConfiguration": [
- {
- "ServerSideEncryptionByDefault": {
- "KMSMasterKeyID": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "SSEAlgorithm": "aws:kms",
- },
- },
- ],
- },
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- },
- "PublicAccessBlockConfiguration": {
- "BlockPublicAcls": true,
- "BlockPublicPolicy": true,
- "IgnorePublicAcls": true,
- "RestrictPublicBuckets": true,
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsAutoDeleteObjectsCustomResourceFEF48A36": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "PipelineArtifactsPolicy87787A0D",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsPolicy87787A0D": {
- "Properties": {
- "Bucket": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "PipelineBuildLogs0533272F": {
- "DeletionPolicy": "Retain",
- "Properties": {
- "RetentionInDays": 3653,
- },
- "Type": "AWS::Logs::LogGroup",
- "UpdateReplacePolicy": "Retain",
- },
- "PipelineOutput78594CB5": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "BucketEncryption": {
- "ServerSideEncryptionConfiguration": [
- {
- "ServerSideEncryptionByDefault": {
- "KMSMasterKeyID": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- "SSEAlgorithm": "aws:kms",
- },
- },
- ],
- },
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineOutputAutoDeleteObjectsCustomResourceF3013510": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "PipelineOutputPolicyCB4CC2E6",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "PipelineOutput78594CB5",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineOutputPolicyCB4CC2E6": {
- "Properties": {
- "Bucket": {
- "Ref": "PipelineOutput78594CB5",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "SourceRepoSourceRepositoryC86045A8": {
- "Properties": {
- "Code": {
- "BranchName": "main",
- "S3": {
- "Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "Key": "arbitrary-file.ext",
- },
- },
- "RepositoryName": "layer-repo-MyTestStack",
- },
- "Type": "AWS::CodeCommit::Repository",
- },
- "SourceRepoSourceRepositoryMyTestStackEmbeddedLinuxPipeline3F66E11BmainEventRule5C93E610": {
- "Properties": {
- "EventPattern": {
- "detail": {
- "event": [
- "referenceCreated",
- "referenceUpdated",
- ],
- "referenceName": [
- "main",
- ],
- },
- "detail-type": [
- "CodeCommit Repository State Change",
- ],
- "resources": [
- {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- ],
- "source": [
- "aws.codecommit",
- ],
- },
- "State": "ENABLED",
- "Targets": [
- {
- "Arn": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- "Id": "Target0",
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineEventsRoleF9DA96F1",
- "Arn",
- ],
- },
- },
- ],
- },
- "Type": "AWS::Events::Rule",
- },
- "VMImportRoleAC246CAD": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Condition": {
- "StringEquals": {
- "sts:ExternalId": "vmimport",
- },
- },
- "Effect": "Allow",
- "Principal": {
- "Service": "vmie.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "Policies": [
- {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetBucketLocation",
- "s3:GetObject",
- "s3:ListBucket",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "ec2:CreateTags",
- "ec2:DescribeTags",
- ],
- "Condition": {
- "StringEquals": {
- "ec2:ResourceTag/CreatedBy": [
- "aws4embeddedlinux-ci",
- ],
- },
- },
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": "ec2:CopySnapshot",
- "Effect": "Allow",
- "Resource": "arn:aws:ec2:eu-central-1::snapshot/*",
- },
- {
- "Action": "ec2:DescribeSnapshots",
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": [
- "kms:CreateGrant",
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:GenerateDataKeyWithoutPlaintext",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "OutputBucketEncryptionKey0E569549",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "importPolicy",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- },
- "Rules": {
- "CheckBootstrapVersion": {
- "Assertions": [
- {
- "Assert": {
- "Fn::Not": [
- {
- "Fn::Contains": [
- [
- "1",
- "2",
- "3",
- "4",
- "5",
- ],
- {
- "Ref": "BootstrapVersion",
- },
- ],
- },
- ],
- },
- "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
- },
- ],
- },
- },
-}
-`;
-
-exports[`Pipeline Snapshot Poky Pipeline 1`] = `
-{
- "Outputs": {
- "BuildOutput": {
- "Description": "The output bucket of this pipeline.",
- "Value": {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- },
- },
- "Parameters": {
- "BootstrapVersion": {
- "Default": "/cdk-bootstrap/hnb659fds/version",
- "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
- "Type": "AWS::SSM::Parameter::Value",
- },
- },
- "Resources": {
- "ArtifactAccessLoggingAutoDeleteObjectsCustomResourceD9DFD1B2": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "ArtifactAccessLoggingPolicyDC97CE59",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "ArtifactAccessLoggingD6FCABA3": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "AccessControl": "LogDeliveryWrite",
- "OwnershipControls": {
- "Rules": [
- {
- "ObjectOwnership": "ObjectWriter",
- },
- ],
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "ArtifactAccessLoggingPolicyDC97CE59": {
- "Properties": {
- "Bucket": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "ArtifactAccessLoggingD6FCABA3",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "BuildProjectSecurityGroup28D27668": {
- "Properties": {
- "GroupDescription": "Security Group to allow attaching EFS",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "SecurityGroupIngress": [
- {
- "CidrIp": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttBucket83908E77CidrBlockD1D303CF",
- },
- "Description": "NFS Mount Port",
- "FromPort": 2049,
- "IpProtocol": "tcp",
- "ToPort": 2049,
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "CheckOSAndStop224E880C": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "codepipeline:StopPipelineExecution",
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- },
- {
- "Action": "ecr:DescribeImages",
- "Effect": "Allow",
- "Resource": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "CheckOSAndStop224E880C",
- "Roles": [
- {
- "Ref": "OSImageCheckOnStartServiceRole2D11D1E2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
- "DependsOn": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "S3Key": "faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6.zip",
- },
- "Description": {
- "Fn::Join": [
- "",
- [
- "Lambda function for auto-deleting objects in ",
- {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- " S3 bucket.",
- ],
- ],
- },
- "Handler": "index.handler",
- "MemorySize": 128,
- "Role": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxBuildProject45760157": {
- "DependsOn": [
- "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9",
- ],
- "Properties": {
- "Artifacts": {
- "Type": "CODEPIPELINE",
- },
- "Cache": {
- "Type": "NO_CACHE",
- },
- "EncryptionKey": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "Environment": {
- "ComputeType": "BUILD_GENERAL1_2XLARGE",
- "Image": {
- "Fn::Join": [
- "",
- [
- {
- "Fn::Select": [
- 4,
- {
- "Fn::Split": [
- ":",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- ],
- },
- ],
- },
- ".dkr.ecr.",
- {
- "Fn::Select": [
- 3,
- {
- "Fn::Split": [
- ":",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- ],
- },
- ],
- },
- ".",
- {
- "Ref": "AWS::URLSuffix",
- },
- "/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefRepository22E53BBD9A9E013B",
- },
- ":latest",
- ],
- ],
- },
- "ImagePullCredentialsType": "SERVICE_ROLE",
- "PrivilegedMode": true,
- "Type": "LINUX_CONTAINER",
- },
- "FileSystemLocations": [
- {
- "Identifier": "tmp_dir",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/build-output",
- "Type": "EFS",
- },
- {
- "Identifier": "sstate_cache",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/sstate-cache",
- "Type": "EFS",
- },
- {
- "Identifier": "dl_dir",
- "Location": {
- "Fn::Join": [
- "",
- [
- {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- ".efs.eu-central-1.amazonaws.com:/",
- ],
- ],
- },
- "MountPoint": "/downloads",
- "Type": "EFS",
- },
- ],
- "LogsConfig": {
- "CloudWatchLogs": {
- "GroupName": {
- "Ref": "PipelineBuildLogs0533272F",
- },
- "Status": "ENABLED",
- },
- },
- "ServiceRole": {
- "Fn::GetAtt": [
- "EmbeddedLinuxBuildProjectRole4EBABAB2",
- "Arn",
- ],
- },
- "Source": {
- "BuildSpec": "build.buildspec.yml",
- "Type": "CODEPIPELINE",
- },
- "TimeoutInMinutes": 240,
- "VpcConfig": {
- "SecurityGroupIds": [
- {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- ],
- "Subnets": [
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- },
- "Type": "AWS::CodeBuild::Project",
- },
- "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "ec2:CreateNetworkInterface",
- "ec2:DescribeNetworkInterfaces",
- "ec2:DeleteNetworkInterface",
- "ec2:DescribeSubnets",
- "ec2:DescribeSecurityGroups",
- "ec2:DescribeDhcpOptions",
- "ec2:DescribeVpcs",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxBuildProjectPolicyDocumentBD98C4E9",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxBuildProjectRole4EBABAB2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxBuildProjectRole4EBABAB2": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "codebuild.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxBuildProjectRoleDefaultPolicy59C0930B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "ecr:BatchCheckLayerAvailability",
- "ecr:GetDownloadUrlForLayer",
- "ecr:BatchGetImage",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::ImportValue": "RepoStack:ExportsOutputFnGetAttRepository22E53BBDArn3AD4E30B",
- },
- },
- {
- "Action": "ecr:GetAuthorizationToken",
- "Effect": "Allow",
- "Resource": "*",
- },
- {
- "Action": [
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineBuildLogs0533272F",
- "Arn",
- ],
- },
- },
- {
- "Action": "ec2:CreateNetworkInterfacePermission",
- "Condition": {
- "StringEquals": {
- "ec2:AuthorizedService": "codebuild.amazonaws.com",
- "ec2:Subnet": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":subnet/",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- ],
- ],
- },
- ],
- },
- },
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":ec2:",
- {
- "Ref": "AWS::Region",
- },
- ":",
- {
- "Ref": "AWS::AccountId",
- },
- ":network-interface/*",
- ],
- ],
- },
- },
- {
- "Action": [
- "logs:CreateLogGroup",
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":logs:eu-central-1:12341234:log-group:/aws/codebuild/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- ],
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":logs:eu-central-1:12341234:log-group:/aws/codebuild/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- ":*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "codebuild:CreateReportGroup",
- "codebuild:CreateReport",
- "codebuild:UpdateReport",
- "codebuild:BatchPutTestCases",
- "codebuild:BatchPutCodeCoverages",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codebuild:eu-central-1:12341234:report-group/",
- {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- "-*",
- ],
- ],
- },
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": "codecommit:GitPull",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxBuildProjectRoleDefaultPolicy59C0930B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxBuildProjectRole4EBABAB2",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipeline1DDFB4FE": {
- "DependsOn": [
- "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9",
- "EmbeddedLinuxPipelineRole1094A815",
- ],
- "Properties": {
- "ArtifactStore": {
- "EncryptionKey": {
- "Id": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "Type": "KMS",
- },
- "Location": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "Type": "S3",
- },
- "PipelineType": "V1",
- "RestartExecutionOnUpdate": true,
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineRole1094A815",
- "Arn",
- ],
- },
- "Stages": [
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Source",
- "Owner": "AWS",
- "Provider": "CodeCommit",
- "Version": "1",
- },
- "Configuration": {
- "BranchName": "main",
- "OutputArtifactFormat": "CODEBUILD_CLONE_REF",
- "PollForSourceChanges": false,
- "RepositoryName": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Name",
- ],
- },
- },
- "Name": "Source",
- "OutputArtifacts": [
- {
- "Name": "Artifact_Source_Source",
- },
- ],
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Source",
- },
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Build",
- "Owner": "AWS",
- "Provider": "CodeBuild",
- "Version": "1",
- },
- "Configuration": {
- "ProjectName": {
- "Ref": "EmbeddedLinuxBuildProject45760157",
- },
- },
- "InputArtifacts": [
- {
- "Name": "Artifact_Source_Source",
- },
- ],
- "Name": "Build",
- "OutputArtifacts": [
- {
- "Name": "Artifact_Build_Build",
- },
- ],
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Build",
- },
- {
- "Actions": [
- {
- "ActionTypeId": {
- "Category": "Deploy",
- "Owner": "AWS",
- "Provider": "S3",
- "Version": "1",
- },
- "Configuration": {
- "BucketName": {
- "Ref": "PipelineOutput78594CB5",
- },
- "Extract": "true",
- },
- "InputArtifacts": [
- {
- "Name": "Artifact_Build_Build",
- },
- ],
- "Name": "Artifact",
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- "Arn",
- ],
- },
- "RunOrder": 1,
- },
- ],
- "Name": "Artifact",
- },
- ],
- },
- "Type": "AWS::CodePipeline::Pipeline",
- },
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRoleDefaultPolicyD75CCCBC": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineArtifactCodePipelineActionRoleDefaultPolicyD75CCCBC",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleDefaultPolicy176F5E4B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "codebuild:BatchGetBuilds",
- "codebuild:StartBuild",
- "codebuild:StopBuild",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxBuildProject45760157",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineBuildCodePipelineActionRoleDefaultPolicy176F5E4B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystem1772812C": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineDownloadsFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget1CA5C8C01": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget2BC3B1054": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsMountTarget3C062C6FF": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineDownloadsFilesystem1772812C",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38": {
- "Properties": {
- "GroupDescription": "MyTestStack/EmbeddedLinuxPipelineDownloadsFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineDownloadsFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroupfromMyTestStackBuildProjectSecurityGroupA374A3A920495E2D9CF2": {
- "Properties": {
- "Description": "from MyTestStackBuildProjectSecurityGroupA374A3A9:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineDownloadsFilesystemEfsSecurityGroup844F0D38",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "EmbeddedLinuxPipelineEventsRoleDefaultPolicy7234197B": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "codepipeline:StartPipelineExecution",
- "Effect": "Allow",
- "Resource": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineEventsRoleDefaultPolicy7234197B",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineEventsRoleF9DA96F1",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineEventsRoleF9DA96F1": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "events.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineRole1094A815": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "codepipeline.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineBuildCodePipelineActionRoleC4160EB4",
- "Arn",
- ],
- },
- },
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineArtifactCodePipelineActionRole02805750",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineRoleDefaultPolicyD23E75B9",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineRole1094A815",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineSStateFilesystem36BA2630": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineSStateFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget15401AFF6": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget25BFCAE34": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsMountTarget347551AC1": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineSStateFilesystem36BA2630",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2": {
- "Properties": {
- "GroupDescription": "MyTestStack/EmbeddedLinuxPipelineSStateFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineSStateFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroupfromMyTestStackBuildProjectSecurityGroupA374A3A92049D2B7AC43": {
- "Properties": {
- "Description": "from MyTestStackBuildProjectSecurityGroupA374A3A9:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineSStateFilesystemEfsSecurityGroup4099B7F2",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleDefaultPolicyE4783D85": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "s3:GetObject*",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- "s3:PutObject",
- "s3:PutObjectLegalHold",
- "s3:PutObjectRetention",
- "s3:PutObjectTagging",
- "s3:PutObjectVersionTagging",
- "s3:Abort*",
- ],
- "Effect": "Allow",
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "kms:Decrypt",
- "kms:DescribeKey",
- "kms:Encrypt",
- "kms:ReEncrypt*",
- "kms:GenerateDataKey*",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- },
- {
- "Action": [
- "codecommit:GetBranch",
- "codecommit:GetCommit",
- "codecommit:UploadArchive",
- "codecommit:GetUploadArchiveStatus",
- "codecommit:CancelUploadArchive",
- "codecommit:GetRepository",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "EmbeddedLinuxPipelineSourceCodePipelineActionRoleDefaultPolicyE4783D85",
- "Roles": [
- {
- "Ref": "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "EmbeddedLinuxPipelineSourceCodePipelineActionRoleF0FC21D6": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::IAM::Role",
- },
- "EmbeddedLinuxPipelineTempFilesystem8ECAD602": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "Encrypted": true,
- "FileSystemTags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineTempFilesystem",
- },
- ],
- },
- "Type": "AWS::EFS::FileSystem",
- "UpdateReplacePolicy": "Delete",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget1C1FB920C": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet1SubnetEF90658EEBA34A64",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget240F5557C": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet2Subnet0764F5E844EB0F67",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsMountTarget31EDABBCB": {
- "Properties": {
- "FileSystemId": {
- "Ref": "EmbeddedLinuxPipelineTempFilesystem8ECAD602",
- },
- "SecurityGroups": [
- {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- ],
- "SubnetId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucketPrivateSubnet3SubnetB0BAE95180198C81",
- },
- },
- "Type": "AWS::EFS::MountTarget",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213": {
- "Properties": {
- "GroupDescription": "MyTestStack/EmbeddedLinuxPipelineTempFilesystem/EfsSecurityGroup",
- "SecurityGroupEgress": [
- {
- "CidrIp": "0.0.0.0/0",
- "Description": "Allow all outbound traffic by default",
- "IpProtocol": "-1",
- },
- ],
- "Tags": [
- {
- "Key": "Name",
- "Value": "MyTestStack/EmbeddedLinuxPipelineTempFilesystem",
- },
- ],
- "VpcId": {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefBucket83908E7781C90AC0",
- },
- },
- "Type": "AWS::EC2::SecurityGroup",
- },
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupfromMyTestStackBuildProjectSecurityGroupA374A3A9204979E58A91": {
- "Properties": {
- "Description": "from MyTestStackBuildProjectSecurityGroupA374A3A9:2049",
- "FromPort": 2049,
- "GroupId": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineTempFilesystemEfsSecurityGroupE46E3213",
- "GroupId",
- ],
- },
- "IpProtocol": "tcp",
- "SourceSecurityGroupId": {
- "Fn::GetAtt": [
- "BuildProjectSecurityGroup28D27668",
- "GroupId",
- ],
- },
- "ToPort": 2049,
- },
- "Type": "AWS::EC2::SecurityGroupIngress",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": {
- "DependsOn": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- ],
- "Properties": {
- "Code": {
- "S3Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "S3Key": "2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d.zip",
- },
- "Handler": "index.handler",
- "Role": {
- "Fn::GetAtt": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- "Arn",
- ],
- },
- "Runtime": "nodejs20.x",
- "Timeout": 900,
- },
- "Type": "AWS::Lambda::Function",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- ],
- ],
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "logs:PutRetentionPolicy",
- "logs:DeleteRetentionPolicy",
- ],
- "Effect": "Allow",
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
- "Roles": [
- {
- "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "OSImageCheckOnStart0C599B99": {
- "DependsOn": [
- "OSImageCheckOnStartServiceRole2D11D1E2",
- ],
- "Properties": {
- "Code": {
- "ZipFile": {
- "Fn::Join": [
- "",
- [
- "
-import boto3
-import json
-
-ecr_client = boto3.client('ecr')
-codepipeline_client = boto3.client('codepipeline')
-
-def handler(event, context):
- print("Received event: " + json.dumps(event, indent=2))
- response = ecr_client.describe_images(repositoryName='",
- {
- "Fn::ImportValue": "RepoStack:ExportsOutputRefRepository22E53BBD9A9E013B",
- },
- "', filter={'tagStatus': 'TAGGED'})
- for i in response['imageDetails']:
- if 'undefined' in i['imageTags']:
- break
- else:
- print('OS image not found. Stopping execution.')
- response = codepipeline_client.stop_pipeline_execution(
- pipelineName=event['detail']['pipeline'],
- pipelineExecutionId=event['detail']['execution-id'],
- abandon=True,
- reason='OS image not found in ECR repository. Stopping pipeline until image is present.')
- ",
- ],
- ],
- },
- },
- "Handler": "index.handler",
- "Role": {
- "Fn::GetAtt": [
- "OSImageCheckOnStartServiceRole2D11D1E2",
- "Arn",
- ],
- },
- "Runtime": "python3.10",
- },
- "Type": "AWS::Lambda::Function",
- },
- "OSImageCheckOnStartLogRetention2E659F28": {
- "Properties": {
- "LogGroupName": {
- "Fn::Join": [
- "",
- [
- "/aws/lambda/",
- {
- "Ref": "OSImageCheckOnStart0C599B99",
- },
- ],
- ],
- },
- "RetentionInDays": 3653,
- "ServiceToken": {
- "Fn::GetAtt": [
- "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
- "Arn",
- ],
- },
- },
- "Type": "Custom::LogRetention",
- },
- "OSImageCheckOnStartServiceRole2D11D1E2": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "lambda.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "ManagedPolicyArns": [
- {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
- ],
- ],
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- "OnPipelineStartRuleAllowEventRuleMyTestStackOSImageCheckOnStart16BFD20B7F872FCA": {
- "Properties": {
- "Action": "lambda:InvokeFunction",
- "FunctionName": {
- "Fn::GetAtt": [
- "OSImageCheckOnStart0C599B99",
- "Arn",
- ],
- },
- "Principal": "events.amazonaws.com",
- "SourceArn": {
- "Fn::GetAtt": [
- "OnPipelineStartRuleC732FFCF",
- "Arn",
- ],
- },
- },
- "Type": "AWS::Lambda::Permission",
- },
- "OnPipelineStartRuleC732FFCF": {
- "Properties": {
- "EventPattern": {
- "detail": {
- "execution-trigger": {
- "trigger-type": [
- "CreatePipeline",
- ],
- },
- "state": [
- "STARTED",
- ],
- },
- "detail-type": [
- "CodePipeline Pipeline Execution State Change",
- ],
- "source": [
- "aws.codepipeline",
- ],
- },
- "State": "ENABLED",
- "Targets": [
- {
- "Arn": {
- "Fn::GetAtt": [
- "OSImageCheckOnStart0C599B99",
- "Arn",
- ],
- },
- "Id": "Target0",
- },
- ],
- },
- "Type": "AWS::Events::Rule",
- },
- "PipelineArtifactKeyEC0C0075": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "EnableKeyRotation": true,
- "KeyPolicy": {
- "Statement": [
- {
- "Action": "kms:*",
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":iam::12341234:root",
- ],
- ],
- },
- },
- "Resource": "*",
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::KMS::Key",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifacts4A9B2621": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "BucketEncryption": {
- "ServerSideEncryptionConfiguration": [
- {
- "ServerSideEncryptionByDefault": {
- "KMSMasterKeyID": {
- "Fn::GetAtt": [
- "PipelineArtifactKeyEC0C0075",
- "Arn",
- ],
- },
- "SSEAlgorithm": "aws:kms",
- },
- },
- ],
- },
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- },
- "PublicAccessBlockConfiguration": {
- "BlockPublicAcls": true,
- "BlockPublicPolicy": true,
- "IgnorePublicAcls": true,
- "RestrictPublicBuckets": true,
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsAutoDeleteObjectsCustomResourceFEF48A36": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "PipelineArtifactsPolicy87787A0D",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineArtifactsPolicy87787A0D": {
- "Properties": {
- "Bucket": {
- "Ref": "PipelineArtifacts4A9B2621",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineArtifacts4A9B2621",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "PipelineBuildLogs0533272F": {
- "DeletionPolicy": "Retain",
- "Properties": {
- "RetentionInDays": 3653,
- },
- "Type": "AWS::Logs::LogGroup",
- "UpdateReplacePolicy": "Retain",
- },
- "PipelineOutput78594CB5": {
- "DeletionPolicy": "Delete",
- "Properties": {
- "LoggingConfiguration": {
- "DestinationBucketName": {
- "Ref": "ArtifactAccessLoggingD6FCABA3",
- },
- },
- "Tags": [
- {
- "Key": "aws-cdk:auto-delete-objects",
- "Value": "true",
- },
- ],
- "VersioningConfiguration": {
- "Status": "Enabled",
- },
- },
- "Type": "AWS::S3::Bucket",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineOutputAutoDeleteObjectsCustomResourceF3013510": {
- "DeletionPolicy": "Delete",
- "DependsOn": [
- "PipelineOutputPolicyCB4CC2E6",
- ],
- "Properties": {
- "BucketName": {
- "Ref": "PipelineOutput78594CB5",
- },
- "ServiceToken": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
- "Arn",
- ],
- },
- },
- "Type": "Custom::S3AutoDeleteObjects",
- "UpdateReplacePolicy": "Delete",
- },
- "PipelineOutputPolicyCB4CC2E6": {
- "Properties": {
- "Bucket": {
- "Ref": "PipelineOutput78594CB5",
- },
- "PolicyDocument": {
- "Statement": [
- {
- "Action": "s3:*",
- "Condition": {
- "Bool": {
- "aws:SecureTransport": "false",
- },
- },
- "Effect": "Deny",
- "Principal": {
- "AWS": "*",
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- {
- "Action": [
- "s3:PutBucketPolicy",
- "s3:GetBucket*",
- "s3:List*",
- "s3:DeleteObject*",
- ],
- "Effect": "Allow",
- "Principal": {
- "AWS": {
- "Fn::GetAtt": [
- "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
- "Arn",
- ],
- },
- },
- "Resource": [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- {
- "Fn::Join": [
- "",
- [
- {
- "Fn::GetAtt": [
- "PipelineOutput78594CB5",
- "Arn",
- ],
- },
- "/*",
- ],
- ],
- },
- ],
- },
- ],
- "Version": "2012-10-17",
- },
- },
- "Type": "AWS::S3::BucketPolicy",
- },
- "SourceRepoSourceRepositoryC86045A8": {
- "Properties": {
- "Code": {
- "BranchName": "main",
- "S3": {
- "Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "Key": "03d16bf861cb657df931bd33404567ac7f02ff927d18a45f5cc7f7cc981bb7ce.zip",
- },
- },
- "RepositoryName": "layer-repo-MyTestStack",
- },
- "Type": "AWS::CodeCommit::Repository",
- },
- "SourceRepoSourceRepositoryMyTestStackEmbeddedLinuxPipeline3F66E11BmainEventRule5C93E610": {
- "Properties": {
- "EventPattern": {
- "detail": {
- "event": [
- "referenceCreated",
- "referenceUpdated",
- ],
- "referenceName": [
- "main",
- ],
- },
- "detail-type": [
- "CodeCommit Repository State Change",
- ],
- "resources": [
- {
- "Fn::GetAtt": [
- "SourceRepoSourceRepositoryC86045A8",
- "Arn",
- ],
- },
- ],
- "source": [
- "aws.codecommit",
- ],
- },
- "State": "ENABLED",
- "Targets": [
- {
- "Arn": {
- "Fn::Join": [
- "",
- [
- "arn:",
- {
- "Ref": "AWS::Partition",
- },
- ":codepipeline:eu-central-1:12341234:",
- {
- "Ref": "EmbeddedLinuxPipeline1DDFB4FE",
- },
- ],
- ],
- },
- "Id": "Target0",
- "RoleArn": {
- "Fn::GetAtt": [
- "EmbeddedLinuxPipelineEventsRoleF9DA96F1",
- "Arn",
- ],
- },
- },
- ],
- },
- "Type": "AWS::Events::Rule",
- },
- },
- "Rules": {
- "CheckBootstrapVersion": {
- "Assertions": [
- {
- "Assert": {
- "Fn::Not": [
- {
- "Fn::Contains": [
- [
- "1",
- "2",
- "3",
- "4",
- "5",
- ],
- {
- "Ref": "BootstrapVersion",
- },
- ],
- },
- ],
- },
- "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
- },
- ],
- },
- },
-}
-`;
diff --git a/test/__snapshots__/network.test.ts.snap b/test/__snapshots__/network.test.ts.snap
deleted file mode 100644
index 30c6a66..0000000
--- a/test/__snapshots__/network.test.ts.snap
+++ /dev/null
@@ -1,665 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Pipeline Networking Snapshot 1`] = `
-{
- "Parameters": {
- "BootstrapVersion": {
- "Default": "/cdk-bootstrap/hnb659fds/version",
- "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
- "Type": "AWS::SSM::Parameter::Value",
- },
- },
- "Resources": {
- "LogGroupF5B46931": {
- "DeletionPolicy": "Retain",
- "Properties": {
- "RetentionInDays": 3653,
- },
- "Type": "AWS::Logs::LogGroup",
- "UpdateReplacePolicy": "Retain",
- },
- "PipelineVpc0543904A": {
- "Properties": {
- "CidrBlock": "10.0.0.0/16",
- "EnableDnsHostnames": true,
- "EnableDnsSupport": true,
- "InstanceTenancy": "default",
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc",
- },
- ],
- },
- "Type": "AWS::EC2::VPC",
- },
- "PipelineVpcIGW3FA4A524": {
- "Properties": {
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc",
- },
- ],
- },
- "Type": "AWS::EC2::InternetGateway",
- },
- "PipelineVpcPrivateSubnet1DefaultRouteC225ACC6": {
- "Properties": {
- "DestinationCidrBlock": "0.0.0.0/0",
- "NatGatewayId": {
- "Ref": "PipelineVpcPublicSubnet1NATGatewayA4388274",
- },
- "RouteTableId": {
- "Ref": "PipelineVpcPrivateSubnet1RouteTable6D8B603D",
- },
- },
- "Type": "AWS::EC2::Route",
- },
- "PipelineVpcPrivateSubnet1RouteTable6D8B603D": {
- "Properties": {
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PrivateSubnet1",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::RouteTable",
- },
- "PipelineVpcPrivateSubnet1RouteTableAssociation791F1EF2": {
- "Properties": {
- "RouteTableId": {
- "Ref": "PipelineVpcPrivateSubnet1RouteTable6D8B603D",
- },
- "SubnetId": {
- "Ref": "PipelineVpcPrivateSubnet1Subnet442DCECC",
- },
- },
- "Type": "AWS::EC2::SubnetRouteTableAssociation",
- },
- "PipelineVpcPrivateSubnet1Subnet442DCECC": {
- "Properties": {
- "AvailabilityZone": "dummy1a",
- "CidrBlock": "10.0.96.0/19",
- "MapPublicIpOnLaunch": false,
- "Tags": [
- {
- "Key": "aws-cdk:subnet-name",
- "Value": "Private",
- },
- {
- "Key": "aws-cdk:subnet-type",
- "Value": "Private",
- },
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PrivateSubnet1",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::Subnet",
- },
- "PipelineVpcPrivateSubnet2DefaultRouteF3A9A6B9": {
- "Properties": {
- "DestinationCidrBlock": "0.0.0.0/0",
- "NatGatewayId": {
- "Ref": "PipelineVpcPublicSubnet2NATGateway5B528D21",
- },
- "RouteTableId": {
- "Ref": "PipelineVpcPrivateSubnet2RouteTable9A31913F",
- },
- },
- "Type": "AWS::EC2::Route",
- },
- "PipelineVpcPrivateSubnet2RouteTable9A31913F": {
- "Properties": {
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PrivateSubnet2",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::RouteTable",
- },
- "PipelineVpcPrivateSubnet2RouteTableAssociationC502A5A4": {
- "Properties": {
- "RouteTableId": {
- "Ref": "PipelineVpcPrivateSubnet2RouteTable9A31913F",
- },
- "SubnetId": {
- "Ref": "PipelineVpcPrivateSubnet2SubnetE21FED10",
- },
- },
- "Type": "AWS::EC2::SubnetRouteTableAssociation",
- },
- "PipelineVpcPrivateSubnet2SubnetE21FED10": {
- "Properties": {
- "AvailabilityZone": "dummy1b",
- "CidrBlock": "10.0.128.0/19",
- "MapPublicIpOnLaunch": false,
- "Tags": [
- {
- "Key": "aws-cdk:subnet-name",
- "Value": "Private",
- },
- {
- "Key": "aws-cdk:subnet-type",
- "Value": "Private",
- },
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PrivateSubnet2",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::Subnet",
- },
- "PipelineVpcPrivateSubnet3DefaultRoute8706A1DD": {
- "Properties": {
- "DestinationCidrBlock": "0.0.0.0/0",
- "NatGatewayId": {
- "Ref": "PipelineVpcPublicSubnet3NATGateway69775315",
- },
- "RouteTableId": {
- "Ref": "PipelineVpcPrivateSubnet3RouteTableBF7276B0",
- },
- },
- "Type": "AWS::EC2::Route",
- },
- "PipelineVpcPrivateSubnet3RouteTableAssociationEB416B63": {
- "Properties": {
- "RouteTableId": {
- "Ref": "PipelineVpcPrivateSubnet3RouteTableBF7276B0",
- },
- "SubnetId": {
- "Ref": "PipelineVpcPrivateSubnet3SubnetFCC0E247",
- },
- },
- "Type": "AWS::EC2::SubnetRouteTableAssociation",
- },
- "PipelineVpcPrivateSubnet3RouteTableBF7276B0": {
- "Properties": {
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PrivateSubnet3",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::RouteTable",
- },
- "PipelineVpcPrivateSubnet3SubnetFCC0E247": {
- "Properties": {
- "AvailabilityZone": "dummy1c",
- "CidrBlock": "10.0.160.0/19",
- "MapPublicIpOnLaunch": false,
- "Tags": [
- {
- "Key": "aws-cdk:subnet-name",
- "Value": "Private",
- },
- {
- "Key": "aws-cdk:subnet-type",
- "Value": "Private",
- },
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PrivateSubnet3",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::Subnet",
- },
- "PipelineVpcPublicSubnet1DefaultRoute44F3E91D": {
- "DependsOn": [
- "PipelineVpcVPCGW3256101F",
- ],
- "Properties": {
- "DestinationCidrBlock": "0.0.0.0/0",
- "GatewayId": {
- "Ref": "PipelineVpcIGW3FA4A524",
- },
- "RouteTableId": {
- "Ref": "PipelineVpcPublicSubnet1RouteTableE9A67515",
- },
- },
- "Type": "AWS::EC2::Route",
- },
- "PipelineVpcPublicSubnet1EIPBD0800F9": {
- "Properties": {
- "Domain": "vpc",
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet1",
- },
- ],
- },
- "Type": "AWS::EC2::EIP",
- },
- "PipelineVpcPublicSubnet1NATGatewayA4388274": {
- "DependsOn": [
- "PipelineVpcPublicSubnet1DefaultRoute44F3E91D",
- "PipelineVpcPublicSubnet1RouteTableAssociation6D13736B",
- ],
- "Properties": {
- "AllocationId": {
- "Fn::GetAtt": [
- "PipelineVpcPublicSubnet1EIPBD0800F9",
- "AllocationId",
- ],
- },
- "SubnetId": {
- "Ref": "PipelineVpcPublicSubnet1Subnet26FF83E2",
- },
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet1",
- },
- ],
- },
- "Type": "AWS::EC2::NatGateway",
- },
- "PipelineVpcPublicSubnet1RouteTableAssociation6D13736B": {
- "Properties": {
- "RouteTableId": {
- "Ref": "PipelineVpcPublicSubnet1RouteTableE9A67515",
- },
- "SubnetId": {
- "Ref": "PipelineVpcPublicSubnet1Subnet26FF83E2",
- },
- },
- "Type": "AWS::EC2::SubnetRouteTableAssociation",
- },
- "PipelineVpcPublicSubnet1RouteTableE9A67515": {
- "Properties": {
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet1",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::RouteTable",
- },
- "PipelineVpcPublicSubnet1Subnet26FF83E2": {
- "Properties": {
- "AvailabilityZone": "dummy1a",
- "CidrBlock": "10.0.0.0/19",
- "MapPublicIpOnLaunch": true,
- "Tags": [
- {
- "Key": "aws-cdk:subnet-name",
- "Value": "Public",
- },
- {
- "Key": "aws-cdk:subnet-type",
- "Value": "Public",
- },
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet1",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::Subnet",
- },
- "PipelineVpcPublicSubnet2DefaultRoute04C861A0": {
- "DependsOn": [
- "PipelineVpcVPCGW3256101F",
- ],
- "Properties": {
- "DestinationCidrBlock": "0.0.0.0/0",
- "GatewayId": {
- "Ref": "PipelineVpcIGW3FA4A524",
- },
- "RouteTableId": {
- "Ref": "PipelineVpcPublicSubnet2RouteTable5219ED4D",
- },
- },
- "Type": "AWS::EC2::Route",
- },
- "PipelineVpcPublicSubnet2EIPB92B2C07": {
- "Properties": {
- "Domain": "vpc",
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet2",
- },
- ],
- },
- "Type": "AWS::EC2::EIP",
- },
- "PipelineVpcPublicSubnet2NATGateway5B528D21": {
- "DependsOn": [
- "PipelineVpcPublicSubnet2DefaultRoute04C861A0",
- "PipelineVpcPublicSubnet2RouteTableAssociation54D39738",
- ],
- "Properties": {
- "AllocationId": {
- "Fn::GetAtt": [
- "PipelineVpcPublicSubnet2EIPB92B2C07",
- "AllocationId",
- ],
- },
- "SubnetId": {
- "Ref": "PipelineVpcPublicSubnet2Subnet64F58E18",
- },
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet2",
- },
- ],
- },
- "Type": "AWS::EC2::NatGateway",
- },
- "PipelineVpcPublicSubnet2RouteTable5219ED4D": {
- "Properties": {
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet2",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::RouteTable",
- },
- "PipelineVpcPublicSubnet2RouteTableAssociation54D39738": {
- "Properties": {
- "RouteTableId": {
- "Ref": "PipelineVpcPublicSubnet2RouteTable5219ED4D",
- },
- "SubnetId": {
- "Ref": "PipelineVpcPublicSubnet2Subnet64F58E18",
- },
- },
- "Type": "AWS::EC2::SubnetRouteTableAssociation",
- },
- "PipelineVpcPublicSubnet2Subnet64F58E18": {
- "Properties": {
- "AvailabilityZone": "dummy1b",
- "CidrBlock": "10.0.32.0/19",
- "MapPublicIpOnLaunch": true,
- "Tags": [
- {
- "Key": "aws-cdk:subnet-name",
- "Value": "Public",
- },
- {
- "Key": "aws-cdk:subnet-type",
- "Value": "Public",
- },
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet2",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::Subnet",
- },
- "PipelineVpcPublicSubnet3DefaultRouteDD586919": {
- "DependsOn": [
- "PipelineVpcVPCGW3256101F",
- ],
- "Properties": {
- "DestinationCidrBlock": "0.0.0.0/0",
- "GatewayId": {
- "Ref": "PipelineVpcIGW3FA4A524",
- },
- "RouteTableId": {
- "Ref": "PipelineVpcPublicSubnet3RouteTableD6F00678",
- },
- },
- "Type": "AWS::EC2::Route",
- },
- "PipelineVpcPublicSubnet3EIPA3CA7521": {
- "Properties": {
- "Domain": "vpc",
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet3",
- },
- ],
- },
- "Type": "AWS::EC2::EIP",
- },
- "PipelineVpcPublicSubnet3NATGateway69775315": {
- "DependsOn": [
- "PipelineVpcPublicSubnet3DefaultRouteDD586919",
- "PipelineVpcPublicSubnet3RouteTableAssociation163F9BEA",
- ],
- "Properties": {
- "AllocationId": {
- "Fn::GetAtt": [
- "PipelineVpcPublicSubnet3EIPA3CA7521",
- "AllocationId",
- ],
- },
- "SubnetId": {
- "Ref": "PipelineVpcPublicSubnet3SubnetE08894FF",
- },
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet3",
- },
- ],
- },
- "Type": "AWS::EC2::NatGateway",
- },
- "PipelineVpcPublicSubnet3RouteTableAssociation163F9BEA": {
- "Properties": {
- "RouteTableId": {
- "Ref": "PipelineVpcPublicSubnet3RouteTableD6F00678",
- },
- "SubnetId": {
- "Ref": "PipelineVpcPublicSubnet3SubnetE08894FF",
- },
- },
- "Type": "AWS::EC2::SubnetRouteTableAssociation",
- },
- "PipelineVpcPublicSubnet3RouteTableD6F00678": {
- "Properties": {
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet3",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::RouteTable",
- },
- "PipelineVpcPublicSubnet3SubnetE08894FF": {
- "Properties": {
- "AvailabilityZone": "dummy1c",
- "CidrBlock": "10.0.64.0/19",
- "MapPublicIpOnLaunch": true,
- "Tags": [
- {
- "Key": "aws-cdk:subnet-name",
- "Value": "Public",
- },
- {
- "Key": "aws-cdk:subnet-type",
- "Value": "Public",
- },
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/PipelineVpc/PublicSubnet3",
- },
- ],
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::Subnet",
- },
- "PipelineVpcVPCGW3256101F": {
- "Properties": {
- "InternetGatewayId": {
- "Ref": "PipelineVpcIGW3FA4A524",
- },
- "VpcId": {
- "Ref": "PipelineVpc0543904A",
- },
- },
- "Type": "AWS::EC2::VPCGatewayAttachment",
- },
- "VPCFlowLogsFlowLogD2BDB2A5": {
- "Properties": {
- "DeliverLogsPermissionArn": {
- "Fn::GetAtt": [
- "VPCFlowLogsIAMRoleFF7B3C14",
- "Arn",
- ],
- },
- "LogDestinationType": "cloud-watch-logs",
- "LogGroupName": {
- "Ref": "LogGroupF5B46931",
- },
- "ResourceId": {
- "Ref": "PipelineVpc0543904A",
- },
- "ResourceType": "VPC",
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/VPCFlowLogs",
- },
- ],
- "TrafficType": "ALL",
- },
- "Type": "AWS::EC2::FlowLog",
- },
- "VPCFlowLogsIAMRoleDefaultPolicy0D9292CF": {
- "Properties": {
- "PolicyDocument": {
- "Statement": [
- {
- "Action": [
- "logs:CreateLogStream",
- "logs:PutLogEvents",
- "logs:DescribeLogStreams",
- ],
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "LogGroupF5B46931",
- "Arn",
- ],
- },
- },
- {
- "Action": "iam:PassRole",
- "Effect": "Allow",
- "Resource": {
- "Fn::GetAtt": [
- "VPCFlowLogsIAMRoleFF7B3C14",
- "Arn",
- ],
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "PolicyName": "VPCFlowLogsIAMRoleDefaultPolicy0D9292CF",
- "Roles": [
- {
- "Ref": "VPCFlowLogsIAMRoleFF7B3C14",
- },
- ],
- },
- "Type": "AWS::IAM::Policy",
- },
- "VPCFlowLogsIAMRoleFF7B3C14": {
- "Properties": {
- "AssumeRolePolicyDocument": {
- "Statement": [
- {
- "Action": "sts:AssumeRole",
- "Effect": "Allow",
- "Principal": {
- "Service": "vpc-flow-logs.amazonaws.com",
- },
- },
- ],
- "Version": "2012-10-17",
- },
- "Tags": [
- {
- "Key": "Name",
- "Value": "PipelineNetworkStack/VPCFlowLogs",
- },
- ],
- },
- "Type": "AWS::IAM::Role",
- },
- },
- "Rules": {
- "CheckBootstrapVersion": {
- "Assertions": [
- {
- "Assert": {
- "Fn::Not": [
- {
- "Fn::Contains": [
- [
- "1",
- "2",
- "3",
- "4",
- "5",
- ],
- {
- "Ref": "BootstrapVersion",
- },
- ],
- },
- ],
- },
- "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
- },
- ],
- },
- },
-}
-`;
diff --git a/test/__snapshots__/source-repo.test.ts.snap b/test/__snapshots__/source-repo.test.ts.snap
deleted file mode 100644
index d9190e0..0000000
--- a/test/__snapshots__/source-repo.test.ts.snap
+++ /dev/null
@@ -1,55 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Pipeline Source Repository Snapshot 1`] = `
-{
- "Parameters": {
- "BootstrapVersion": {
- "Default": "/cdk-bootstrap/hnb659fds/version",
- "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]",
- "Type": "AWS::SSM::Parameter::Value",
- },
- },
- "Resources": {
- "MyTestStackSourceRepository1F6C3AB0": {
- "Properties": {
- "Code": {
- "BranchName": "main",
- "S3": {
- "Bucket": "cdk-hnb659fds-assets-12341234-eu-central-1",
- "Key": "03d16bf861cb657df931bd33404567ac7f02ff927d18a45f5cc7f7cc981bb7ce.zip",
- },
- },
- "RepositoryName": "charlie",
- },
- "Type": "AWS::CodeCommit::Repository",
- },
- },
- "Rules": {
- "CheckBootstrapVersion": {
- "Assertions": [
- {
- "Assert": {
- "Fn::Not": [
- {
- "Fn::Contains": [
- [
- "1",
- "2",
- "3",
- "4",
- "5",
- ],
- {
- "Ref": "BootstrapVersion",
- },
- ],
- },
- ],
- },
- "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.",
- },
- ],
- },
- },
-}
-`;
diff --git a/test/build-image-data-nag.test.ts b/test/build-image-data-nag.test.ts
deleted file mode 100644
index 5010c6f..0000000
--- a/test/build-image-data-nag.test.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { BuildImageDataStack } from '../lib/build-image-data';
-
-import { Annotations, Match } from 'aws-cdk-lib/assertions';
-import { App, Aspects, Stack } from 'aws-cdk-lib';
-import { AwsSolutionsChecks, NagSuppressions } from 'cdk-nag';
-
-describe('BuildImageDataStack cdk-nag AwsSolutions Pack', () => {
- let stack: Stack;
- let app: App;
-
- beforeAll(() => {
- // GIVEN
- app = new App();
- const props = {
- bucketName: 'test-bucket',
- removalPolicy: cdk.RemovalPolicy.DESTROY,
- autoDeleteObjects: true,
- env: { account: '111111111111', region: 'eu-central-1' },
- };
- stack = new BuildImageDataStack(app, 'MyTestStack', props);
-
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/Resource',
- [
- {
- id: 'AwsSolutions-L1',
- reason: 'This Lambda function is 3rd Party (from CDK libs)',
- },
- ]
- );
-
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- 'MyTestStack/BuildImageBucketRole/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'Because these are the default permissions assigned to a CDK default created role.',
- },
- ]
- );
-
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/BuildImageBucketRole/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- '/aws/lambda/BuildImageData-CustomCDKBucketDeployment* is needed here.',
- },
- ]
- );
-
- // WHEN
- Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
- });
-
- // THEN
- test('No unsuppressed Warnings', () => {
- const warnings = Annotations.fromStack(stack).findWarning(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(warnings).toHaveLength(0);
- });
-
- test('No unsuppressed Errors', () => {
- const errors = Annotations.fromStack(stack).findError(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(errors).toHaveLength(0);
- });
-});
diff --git a/test/build-image-data.test.ts b/test/build-image-data.test.ts
deleted file mode 100644
index 0f241d7..0000000
--- a/test/build-image-data.test.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Template } from 'aws-cdk-lib/assertions';
-import { BuildImageDataStack } from '../lib/build-image-data';
-import { normalizedTemplateFromStack } from './util';
-
-describe('Build Image Data', () => {
- const props = {
- bucketName: 'test-bucket',
- removalPolicy: cdk.RemovalPolicy.DESTROY,
- autoDeleteObjects: true,
- env: { account: '111111111111', region: 'eu-central-1' },
- };
-
- test('S3 Bucket Has Versioning Enabled', () => {
- const app = new cdk.App();
- const stack = new BuildImageDataStack(app, 'MyTestStack', props);
- const template = Template.fromStack(stack);
- template.hasResourceProperties('AWS::S3::Bucket', {
- BucketName: 'test-bucket',
- });
-
- template.allResourcesProperties('AWS::S3::Bucket', {
- VersioningConfiguration: { Status: 'Enabled' },
- });
- });
-
- test('Snapshot', () => {
- const app = new cdk.App();
- const stack = new BuildImageDataStack(app, 'MyTestStack', props);
- /* We must change some randomly generated file names used in the S3 asset construct. */
- const templateWithConstKeys = normalizedTemplateFromStack(stack);
- expect(templateWithConstKeys).toMatchSnapshot();
- });
-});
diff --git a/test/build-image-pipeline-nag.test.ts b/test/build-image-pipeline-nag.test.ts
deleted file mode 100644
index 586311f..0000000
--- a/test/build-image-pipeline-nag.test.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import {
- BuildImagePipelineStack,
- ImageKind,
-} from '../lib/build-image-pipeline';
-import { Repository } from 'aws-cdk-lib/aws-ecr';
-import { Bucket } from 'aws-cdk-lib/aws-s3';
-
-import { Annotations, Match } from 'aws-cdk-lib/assertions';
-import { App, Aspects, Stack } from 'aws-cdk-lib';
-import { AwsSolutionsChecks, NagSuppressions } from 'cdk-nag';
-
-describe('BuildImagePipelineStack cdk-nag AwsSolutions Pack', () => {
- let stack: Stack;
- let app: App;
-
- beforeAll(() => {
- // GIVEN
- const env = { account: '111111111111', region: 'eu-central-1' };
- app = new cdk.App();
- const repoStack = new cdk.Stack(app, 'RepoStack', { env });
- const repository = new Repository(repoStack, 'Repository', {});
- const dataBucket = new Bucket(repoStack, 'Bucket', {});
-
- const props = {
- env,
- imageKind: ImageKind.Ubuntu22_04,
- repository,
- dataBucket,
- };
-
- stack = new BuildImagePipelineStack(repoStack, 'MyTestStack', props);
- NagSuppressions.addStackSuppressions(stack, [
- {
- id: 'AwsSolutions-CB3',
- reason: 'Privilege Mode Required To Build Docker Containers.',
- },
- ]);
-
- NagSuppressions.addResourceSuppressionsByPath(
- repoStack,
- '/RepoStack/MyTestStack/BuildImagePipeline/Role/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'Because these are the default permissions assigned to a CDK default created role.',
- },
- ]
- );
- NagSuppressions.addResourceSuppressionsByPath(
- repoStack,
- '/RepoStack/MyTestStack/BuildImagePipeline/Source/Build-Image-Source/CodePipelineActionRole/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'Because these are the default permissions assigned to a CDK default created role.',
- },
- ]
- );
-
- NagSuppressions.addResourceSuppressionsByPath(
- repoStack,
- '/RepoStack/MyTestStack/BuildImageProject/Role/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'Because these are the default permissions assigned to a CDK default created role.',
- },
- ]
- );
-
- // WHEN
- Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
- });
-
- // THEN
- test('No unsuppressed Warnings', () => {
- const warnings = Annotations.fromStack(stack).findWarning(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
-
- expect(warnings).toHaveLength(0);
- });
-
- test('No unsuppressed Errors', () => {
- const errors = Annotations.fromStack(stack).findError(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(errors).toHaveLength(0);
- });
-});
diff --git a/test/build-image-pipeline.test.ts b/test/build-image-pipeline.test.ts
deleted file mode 100644
index 76ccc21..0000000
--- a/test/build-image-pipeline.test.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Template } from 'aws-cdk-lib/assertions';
-import {
- BuildImagePipelineStack,
- ImageKind,
-} from '../lib/build-image-pipeline';
-import { Repository } from 'aws-cdk-lib/aws-ecr';
-import { Bucket } from 'aws-cdk-lib/aws-s3';
-
-describe('Build Image Pipeline', () => {
- const env = { account: '111111111111', region: 'eu-central-1' };
-
- test('Build Image Pipeline Instantiates', () => {
- const app = new cdk.App();
- const repoStack = new cdk.Stack(app, 'RepoStack', { env });
- const repository = new Repository(repoStack, 'Repository', {});
- const dataBucket = new Bucket(repoStack, 'Bucket', {});
-
- const props = {
- env,
- imageKind: ImageKind.Ubuntu22_04,
- repository,
- dataBucket,
- };
-
- const stack = new BuildImagePipelineStack(repoStack, 'MyTestStack', props);
- const template = Template.fromStack(stack);
- template.resourceCountIs('AWS::CodePipeline::Pipeline', 1);
- template.resourceCountIs('AWS::Logs::LogGroup', 1);
- template.allResourcesProperties('AWS::Logs::LogGroup', {
- RetentionInDays: 3653,
- });
- template.allResourcesProperties('AWS::S3::Bucket', {
- VersioningConfiguration: { Status: 'Enabled' },
- });
- });
-
- test('Snapshot', () => {
- const app = new cdk.App();
- const repoStack = new cdk.Stack(app, 'RepoStack', { env });
- const repository = new Repository(repoStack, 'Repository', {});
- const dataBucket = new Bucket(repoStack, 'Bucket', {});
-
- const props = {
- env,
- imageKind: ImageKind.Ubuntu22_04,
- repository,
- dataBucket,
- };
-
- const stack = new BuildImagePipelineStack(repoStack, 'MyTestStack', props);
- const template = Template.fromStack(stack);
- expect(template).toMatchSnapshot();
- });
-});
diff --git a/test/build-image-repo-nag.test.ts b/test/build-image-repo-nag.test.ts
deleted file mode 100644
index 0cd9ef8..0000000
--- a/test/build-image-repo-nag.test.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { BuildImageRepoStack } from '../lib/build-image-repo';
-import { Annotations, Match } from 'aws-cdk-lib/assertions';
-import { App, Aspects, Stack } from 'aws-cdk-lib';
-import { AwsSolutionsChecks } from 'cdk-nag';
-
-describe('Build Image Repository cdk-nag AwsSolutions Pack', () => {
- const props = {
- env: { account: '111111111111', region: 'eu-central-1' },
- };
- let stack: Stack;
- let app: App;
-
- beforeAll(() => {
- // GIVEN
- app = new App();
- stack = new BuildImageRepoStack(app, 'MyTestStack', props);
- // WHEN
- Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
- });
- // THEN
- test('No unsuppressed Warnings', () => {
- const warnings = Annotations.fromStack(stack).findWarning(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(warnings).toHaveLength(0);
- });
-
- test('No unsuppressed Errors', () => {
- const errors = Annotations.fromStack(stack).findError(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(errors).toHaveLength(0);
- });
-});
diff --git a/test/build-image-repo.test.ts b/test/build-image-repo.test.ts
deleted file mode 100644
index d77d1f1..0000000
--- a/test/build-image-repo.test.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Template } from 'aws-cdk-lib/assertions';
-import { BuildImageRepoStack } from '../lib/build-image-repo';
-
-describe('Build Image Repository', () => {
- const props = {
- env: { account: '111111111111', region: 'eu-central-1' },
- };
-
- test('Snapshot', () => {
- const app = new cdk.App();
- const stack = new BuildImageRepoStack(app, 'MyTestStack', props);
- const template = Template.fromStack(stack);
- expect(template).toMatchSnapshot();
- });
-});
diff --git a/test/codepipeline-embedded-linux-base-image-nag.test.ts b/test/codepipeline-embedded-linux-base-image-nag.test.ts
new file mode 100644
index 0000000..a2b2e66
--- /dev/null
+++ b/test/codepipeline-embedded-linux-base-image-nag.test.ts
@@ -0,0 +1,148 @@
+import * as cdk from "aws-cdk-lib";
+import { Annotations, Match } from "aws-cdk-lib/assertions";
+import { AwsSolutionsChecks, NagSuppressions } from "cdk-nag";
+import * as ecr from "aws-cdk-lib/aws-ecr";
+import * as kms from "aws-cdk-lib/aws-kms";
+import * as s3 from "aws-cdk-lib/aws-s3";
+import {
+ EmbeddedLinuxCodePipelineBaseImageProps,
+ EmbeddedLinuxCodePipelineBaseImageStack,
+} from "../lib/codepipeline-embedded-linux-base-image";
+import { DEFAULT_ENV } from "./util";
+
+function addNagSuppressions(stack: cdk.Stack) {
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/Resource`,
+ [
+ {
+ id: "AwsSolutions-L1",
+ reason: "This Lambda function is 3rd Party (from CDK libs)",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/CodePipelineBuildBaseImageBucketDeploymentRole/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because CodePipelineBuildBaseImageBucketDeploymentRole/Resource is needed here.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/CodePipelineBuildBaseImageBucketDeploymentRole/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/CodePipelineBuildBaseImageProject/Role/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/CodePipelineBuildBaseImageCodePipeline/Role/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/CodePipelineBuildBaseImageCodePipeline/Source/Source/CodePipelineActionRole/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+}
+
+describe("EmbeddedLinuxCodePipelineBaseImageStack cdk-nag AwsSolutions Pack", () => {
+ const app: cdk.App = new cdk.App();
+ let stack: cdk.Stack;
+
+ beforeAll(() => {
+ // GIVEN
+ const baseStack = new cdk.Stack(app, "BaseStack", { env: DEFAULT_ENV });
+
+ const encryptionKey = new kms.Key(baseStack, "EncryptionKey", {
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ enableKeyRotation: true,
+ });
+ const pipelineSourceBucket = new s3.Bucket(
+ baseStack,
+ "PipelineSourceBucket",
+ {
+ versioned: true,
+ },
+ );
+ const pipelineArtifactBucket = new s3.Bucket(
+ baseStack,
+ "PipelineArtifactBucket",
+ {},
+ );
+ const ecrRepository = new ecr.Repository(baseStack, "EcrRepository", {});
+
+ const props: EmbeddedLinuxCodePipelineBaseImageProps = {
+ env: DEFAULT_ENV,
+ pipelineSourceBucket: pipelineSourceBucket,
+ pipelineArtifactBucket: pipelineArtifactBucket,
+ ecrRepository: ecrRepository,
+ encryptionKey: encryptionKey,
+ };
+
+ stack = new EmbeddedLinuxCodePipelineBaseImageStack(
+ app,
+ "MyTestStack",
+ props,
+ );
+
+ addNagSuppressions(stack);
+
+ // WHEN
+ cdk.Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
+ });
+
+ // THEN
+ test("No unsuppressed Warnings", () => {
+ const results = Annotations.fromStack(stack).findWarning(
+ "*",
+ Match.stringLikeRegexp("AwsSolutions-.*"),
+ );
+ for (const result of results) {
+ console.log(JSON.stringify(result, null, 4));
+ }
+ expect(results).toHaveLength(0);
+ });
+ test("No unsuppressed Errors", () => {
+ const results = Annotations.fromStack(stack).findError(
+ "*",
+ Match.stringLikeRegexp("AwsSolutions-.*"),
+ );
+ for (const result of results) {
+ console.log(JSON.stringify(result, null, 4));
+ }
+ expect(results).toHaveLength(0);
+ });
+});
diff --git a/test/codepipeline-embedded-linux-base-image.test.ts b/test/codepipeline-embedded-linux-base-image.test.ts
new file mode 100644
index 0000000..9679efa
--- /dev/null
+++ b/test/codepipeline-embedded-linux-base-image.test.ts
@@ -0,0 +1,65 @@
+import * as cdk from "aws-cdk-lib";
+import * as assertions from "aws-cdk-lib/assertions";
+import { PipelineResourcesProps, PipelineResourcesStack } from "../lib";
+import {
+ EmbeddedLinuxCodePipelineBaseImageProps,
+ EmbeddedLinuxCodePipelineBaseImageStack,
+} from "../lib";
+import { DEFAULT_ENV, normalizedTemplateFromStack } from "./util";
+
+// TODO
+// - add test with PipelineResourcesProps values for various buckets
+// - add test for other outouts
+
+describe("EmbeddedLinuxCodePipelineBaseImageStack", () => {
+ let app: cdk.App;
+ let stack: cdk.Stack;
+ let template: assertions.Template;
+ let pipelineResourcesStack: PipelineResourcesStack;
+
+ const pipelineResourcesProps: PipelineResourcesProps = {
+ resource_prefix: "test",
+ env: DEFAULT_ENV,
+ };
+
+ beforeAll(() => {
+ // GIVEN
+ app = new cdk.App();
+ pipelineResourcesStack = new PipelineResourcesStack(
+ app,
+ "MyResourceStack",
+ pipelineResourcesProps,
+ );
+
+ const embeddedLinuxCodePipelineBaseImageProps: EmbeddedLinuxCodePipelineBaseImageProps =
+ {
+ env: DEFAULT_ENV,
+ pipelineSourceBucket: pipelineResourcesStack.pipelineSourceBucket,
+ pipelineArtifactBucket: pipelineResourcesStack.pipelineArtifactBucket,
+ ecrRepository: pipelineResourcesStack.ecrRepository,
+ encryptionKey: pipelineResourcesStack.encryptionKey,
+ };
+ stack = new EmbeddedLinuxCodePipelineBaseImageStack(
+ app,
+ "MyTestStack",
+ embeddedLinuxCodePipelineBaseImageProps,
+ );
+ template = assertions.Template.fromStack(stack);
+ });
+
+ test("Has Resources", () => {
+ template.resourceCountIs("AWS::CodePipeline::Pipeline", 1);
+ template.resourceCountIs("AWS::CodeBuild::Project", 1);
+ template.resourceCountIs("AWS::Events::Rule", 2); // one for the S3 trigger and one for the weekly refresh
+ template.resourceCountIs("AWS::Logs::LogGroup", 1);
+ template.allResourcesProperties("AWS::Logs::LogGroup", {
+ RetentionInDays: 365,
+ });
+ });
+
+ test("Snapshot", () => {
+ /* We must change some randomly generated file names used in the S3 asset construct. */
+ const templateWithConstKeys = normalizedTemplateFromStack(stack);
+ expect(templateWithConstKeys).toMatchSnapshot();
+ });
+});
diff --git a/test/codepipeline-embedded-linux-nag.test.ts b/test/codepipeline-embedded-linux-nag.test.ts
new file mode 100644
index 0000000..065e74c
--- /dev/null
+++ b/test/codepipeline-embedded-linux-nag.test.ts
@@ -0,0 +1,230 @@
+import * as cdk from "aws-cdk-lib";
+import * as ecr from "aws-cdk-lib/aws-ecr";
+import * as s3 from "aws-cdk-lib/aws-s3";
+import * as ec2 from "aws-cdk-lib/aws-ec2";
+import * as kms from "aws-cdk-lib/aws-kms";
+
+import { Annotations, Match } from "aws-cdk-lib/assertions";
+import { AwsSolutionsChecks, NagSuppressions } from "cdk-nag";
+import { EmbeddedLinuxCodePipelineStack } from "../lib/codepipeline-embedded-linux";
+import { ProjectType } from "../lib";
+import { DEFAULT_ENV } from "./util";
+
+function addNagSuppressions(stack: cdk.Stack) {
+ NagSuppressions.addStackSuppressions(stack, [
+ { id: "CdkNagValidationFailure", reason: "Multiple Validation Failures." },
+ {
+ id: "AwsSolutions-CB3",
+ reason: "CodeBuild Privilege mode is required for this pipeline.",
+ },
+ {
+ id: "AwsSolutions-IAM4",
+ reason: "TODO: Re-evaluate managed policies per resources.",
+ },
+ ]);
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipelineBucketDeploymentRole/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "/aws/lambda/EmbeddedLinuxCodePipeline-CustomCDKBucketDeployment* is needed here.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/Resource`,
+ [
+ {
+ id: "AwsSolutions-L1",
+ reason: "This Lambda function is 3rd Party (from CDK libs)",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipelineProject/PolicyDocument/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipelineProject/Role/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipelineBucketDeploymentRole/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipeline/Role/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipeline/Artifact/Artifact/CodePipelineActionRole/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipeline/Source/Source/CodePipelineActionRole/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "Because these are the default permissions assigned to a CDK default created role.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason:
+ "This is a default CDK created policy, with default policy permissions.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipelineOSImageCheckOnStart/Resource`,
+ [
+ {
+ id: "AwsSolutions-L1",
+ reason: "There is no latest PYTHON version to set.",
+ },
+ ],
+ );
+ NagSuppressions.addResourceSuppressionsByPath(
+ stack,
+ `/${stack.stackName}/EmbeddedLinuxCodePipelineVMImportRole/Resource`,
+ [
+ {
+ id: "AwsSolutions-IAM5",
+ reason: "Wildcard permissions needed on snapshots, bucket content.",
+ appliesTo: [
+ {
+ regex: `/Resource::arn:aws:ec2:${DEFAULT_ENV.region}::snapshot/\\*$/g`,
+ },
+ {
+ regex: `/Resource::/\\*$/g`,
+ },
+ {
+ regex: `/Resource::BaseStack:ExportsOutputFnGetAttOutputBucket7114EB27Arn67D5716D/\\*$/g`,
+ },
+ {
+ regex: `/Resource::\\*$/g`,
+ },
+ ],
+ },
+ ],
+ );
+}
+
+describe("EmbeddedLinuxCodePipelineStack cdk-nag AwsSolutions Pack", () => {
+ const app: cdk.App = new cdk.App();
+ let stack: cdk.Stack;
+
+ beforeAll(() => {
+ // GIVEN
+ const baseStack = new cdk.Stack(app, "BaseStack", { env: DEFAULT_ENV });
+
+ // GIVEN
+ const encryptionKey = new kms.Key(baseStack, "EncryptionKey", {
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
+ enableKeyRotation: true,
+ });
+ const pipelineSourceBucket = new s3.Bucket(
+ baseStack,
+ "pipelineSourceBucket",
+ {
+ versioned: true,
+ },
+ );
+ const pipelineArtifactBucket = new s3.Bucket(
+ baseStack,
+ "ArtifactBucket",
+ {},
+ );
+ const pipelineOutputBucket = new s3.Bucket(baseStack, "OutputBucket", {
+ encryptionKey: encryptionKey,
+ });
+ const ecrRepository = new ecr.Repository(baseStack, "EcrRepository", {});
+ const vpc = new ec2.Vpc(baseStack, "Vpc", {});
+
+ stack = new EmbeddedLinuxCodePipelineStack(app, "MyTestStack", {
+ env: DEFAULT_ENV,
+ pipelineSourceBucket: pipelineSourceBucket,
+ pipelineArtifactBucket: pipelineArtifactBucket,
+ pipelineOutputBucket: pipelineOutputBucket,
+ ecrRepository: ecrRepository,
+ ecrRepositoryImageTag: "ubuntu_22_04",
+ projectType: ProjectType.PokyAmi,
+ vpc: vpc,
+ pipelineArtifactPrefix: `${ProjectType.PokyAmi}`,
+ encryptionKey: encryptionKey,
+ });
+
+ addNagSuppressions(stack);
+
+ // WHEN
+ cdk.Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
+ });
+
+ // THEN
+ test("No unsuppressed Warnings", () => {
+ const results = Annotations.fromStack(stack).findWarning(
+ "*",
+ Match.stringLikeRegexp("AwsSolutions-.*"),
+ );
+ for (const result of results) {
+ console.log(JSON.stringify(result, null, 4));
+ }
+ expect(results).toHaveLength(0);
+ });
+ test("No unsuppressed Errors", () => {
+ const results = Annotations.fromStack(stack).findError(
+ "*",
+ Match.stringLikeRegexp("AwsSolutions-.*"),
+ );
+ for (const result of results) {
+ console.log(JSON.stringify(result, null, 4));
+ }
+ expect(results).toHaveLength(0);
+ });
+});
diff --git a/test/codepipeline-embedded-linux.test.ts b/test/codepipeline-embedded-linux.test.ts
new file mode 100644
index 0000000..0497075
--- /dev/null
+++ b/test/codepipeline-embedded-linux.test.ts
@@ -0,0 +1,100 @@
+import * as cdk from "aws-cdk-lib";
+import * as assertions from "aws-cdk-lib/assertions";
+import {
+ PipelineResourcesProps,
+ PipelineResourcesStack,
+ ProjectType,
+} from "../lib";
+import {
+ EmbeddedLinuxCodePipelineBaseImageProps,
+ EmbeddedLinuxCodePipelineBaseImageStack,
+} from "../lib";
+import {
+ EmbeddedLinuxCodePipelineProps,
+ EmbeddedLinuxCodePipelineStack,
+} from "../lib";
+import { DEFAULT_ENV, normalizedTemplateFromStack } from "./util";
+
+// TODO
+// - add test with PipelineResourcesProps values for various buckets
+// - add test for other outouts
+
+describe("EmbeddedLinuxCodePipelineStack", () => {
+ let app: cdk.App;
+ let stack: cdk.Stack;
+ let template: assertions.Template;
+ let pipelineResourcesStack: PipelineResourcesStack;
+ let embeddedLinuxCodePipelineBaseImageStack: EmbeddedLinuxCodePipelineBaseImageStack;
+
+ const pipelineResourcesProps: PipelineResourcesProps = {
+ resource_prefix: "test",
+ env: DEFAULT_ENV,
+ };
+
+ beforeAll(() => {
+ // GIVEN
+ app = new cdk.App();
+ pipelineResourcesStack = new PipelineResourcesStack(
+ app,
+ "MyResourceStack",
+ pipelineResourcesProps,
+ );
+
+ const embeddedLinuxCodePipelineBaseImageProps: EmbeddedLinuxCodePipelineBaseImageProps =
+ {
+ env: DEFAULT_ENV,
+ pipelineSourceBucket: pipelineResourcesStack.pipelineSourceBucket,
+ pipelineArtifactBucket: pipelineResourcesStack.pipelineArtifactBucket,
+ ecrRepository: pipelineResourcesStack.ecrRepository,
+ encryptionKey: pipelineResourcesStack.encryptionKey,
+ };
+
+ embeddedLinuxCodePipelineBaseImageStack =
+ new EmbeddedLinuxCodePipelineBaseImageStack(
+ app,
+ "MyBaseImageStack",
+ embeddedLinuxCodePipelineBaseImageProps,
+ );
+
+ const embeddedLinuxCodePipelineProps: EmbeddedLinuxCodePipelineProps = {
+ env: DEFAULT_ENV,
+ ecrRepository: embeddedLinuxCodePipelineBaseImageStack.ecrRepository,
+ ecrRepositoryImageTag:
+ embeddedLinuxCodePipelineBaseImageStack.ecrRepositoryImageTag,
+ pipelineSourceBucket: pipelineResourcesStack.pipelineSourceBucket,
+ pipelineArtifactBucket: pipelineResourcesStack.pipelineArtifactBucket,
+ pipelineOutputBucket: pipelineResourcesStack.pipelineOutputBucket,
+ projectType: ProjectType.Poky,
+ vpc: pipelineResourcesStack.vpc,
+ pipelineArtifactPrefix: `${ProjectType.Poky}`,
+ encryptionKey: pipelineResourcesStack.encryptionKey,
+ };
+
+ stack = new EmbeddedLinuxCodePipelineStack(
+ app,
+ "MyTestStack",
+ embeddedLinuxCodePipelineProps,
+ );
+ template = assertions.Template.fromStack(stack);
+ });
+
+ test("Has Resources", () => {
+ template.resourceCountIs("AWS::CodePipeline::Pipeline", 1);
+ template.resourceCountIs("AWS::CodeBuild::Project", 1);
+ // AWS::Events::Rule:
+ // - the S3 trigger
+ // - the CodePipeline Execution State Change
+ // - the weekly refresh
+ template.resourceCountIs("AWS::Events::Rule", 3);
+ template.resourceCountIs("AWS::Logs::LogGroup", 1);
+ template.allResourcesProperties("AWS::Logs::LogGroup", {
+ RetentionInDays: 365,
+ });
+ });
+
+ test("Snapshot", () => {
+ /* We must change some randomly generated file names used in the S3 asset construct. */
+ const templateWithConstKeys = normalizedTemplateFromStack(stack);
+ expect(templateWithConstKeys).toMatchSnapshot();
+ });
+});
diff --git a/test/codepipeline-resources-nag.test.ts b/test/codepipeline-resources-nag.test.ts
new file mode 100644
index 0000000..310bee9
--- /dev/null
+++ b/test/codepipeline-resources-nag.test.ts
@@ -0,0 +1,46 @@
+import * as cdk from "aws-cdk-lib";
+
+import { Annotations, Match } from "aws-cdk-lib/assertions";
+import { AwsSolutionsChecks } from "cdk-nag";
+import { DEFAULT_ENV } from "./util";
+import { PipelineResourcesStack } from "../lib";
+
+describe("PipelineResourcesStack cdk-nag AwsSolutions Pack", () => {
+ const app: cdk.App = new cdk.App();
+ let stack: cdk.Stack;
+
+ beforeAll(() => {
+ // GIVEN
+ const props = {
+ env: DEFAULT_ENV,
+ resource_prefix: `${DEFAULT_ENV.account}-${DEFAULT_ENV.region}`,
+ };
+
+ stack = new PipelineResourcesStack(app, "MyTestStack", props);
+
+ // WHEN
+ cdk.Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
+ });
+
+ // THEN
+ test("No unsuppressed Warnings", () => {
+ const results = Annotations.fromStack(stack).findWarning(
+ "*",
+ Match.stringLikeRegexp("AwsSolutions-.*"),
+ );
+ for (const result of results) {
+ console.log(JSON.stringify(result, null, 4));
+ }
+ expect(results).toHaveLength(0);
+ });
+ test("No unsuppressed Errors", () => {
+ const results = Annotations.fromStack(stack).findError(
+ "*",
+ Match.stringLikeRegexp("AwsSolutions-.*"),
+ );
+ for (const result of results) {
+ console.log(JSON.stringify(result, null, 4));
+ }
+ expect(results).toHaveLength(0);
+ });
+});
diff --git a/test/codepipeline-resources.test.ts b/test/codepipeline-resources.test.ts
new file mode 100644
index 0000000..391e12c
--- /dev/null
+++ b/test/codepipeline-resources.test.ts
@@ -0,0 +1,59 @@
+import * as cdk from "aws-cdk-lib";
+import * as assertions from "aws-cdk-lib/assertions";
+import { PipelineResourcesProps, PipelineResourcesStack } from "../lib";
+import { DEFAULT_ENV, normalizedTemplateFromStack } from "./util";
+
+// TODO
+// - add test with PipelineResourcesProps values for various buckets
+// - add test for other outouts
+
+describe("PipelineResourcesStack", () => {
+ let stack: cdk.Stack, app: cdk.App, template: assertions.Template;
+ const props: PipelineResourcesProps = {
+ resource_prefix: "test",
+ env: DEFAULT_ENV,
+ };
+ beforeAll(() => {
+ // GIVEN
+ app = new cdk.App();
+ stack = new PipelineResourcesStack(app, "MyTestStack", props);
+ template = assertions.Template.fromStack(stack);
+ });
+
+ const bucketSuffixes = [`artifact`, `source`, `output`, `logs`];
+ it.each(bucketSuffixes)(`Has S3 Bucket`, (bucketSuffix) => {
+ const bucketName =
+ `${props.resource_prefix}-${props.env?.account}-${props.env?.region}-${bucketSuffix}`.toLowerCase();
+ template.hasResourceProperties("AWS::S3::Bucket", {
+ BucketName: bucketName,
+ });
+ });
+
+ test("Has Versionned S3 Bucket - Source", () => {
+ expect(
+ Object.keys(template.findResources("AWS::S3::Bucket")).find((key) =>
+ key.match(/^PipelineResourcesSourceBucket[A-F0-9]{8}$/),
+ ),
+ ).toBeDefined();
+ expect(
+ Object.entries(template.findResources("AWS::S3::Bucket")).filter(
+ ([key, value]) =>
+ key.match(/^PipelineResourcesSourceBucket[A-F0-9]{8}$/) &&
+ value.Properties.VersioningConfiguration.Status == "Enabled",
+ ),
+ ).toHaveLength(1);
+ });
+
+ test("Logs Have Retention Period", () => {
+ template.resourceCountIs("AWS::Logs::LogGroup", 1);
+ template.allResourcesProperties("AWS::Logs::LogGroup", {
+ RetentionInDays: 365,
+ });
+ });
+
+ test("Snapshot", () => {
+ /* We must change some randomly generated file names used in the S3 asset construct. */
+ const templateWithConstKeys = normalizedTemplateFromStack(stack);
+ expect(templateWithConstKeys).toMatchSnapshot();
+ });
+});
diff --git a/test/embedded-linux-pipeline-nag.test.ts b/test/embedded-linux-pipeline-nag.test.ts
deleted file mode 100644
index e50a317..0000000
--- a/test/embedded-linux-pipeline-nag.test.ts
+++ /dev/null
@@ -1,168 +0,0 @@
-import { EmbeddedLinuxPipelineStack } from '../lib/embedded-linux-pipeline';
-import { Repository } from 'aws-cdk-lib/aws-ecr';
-import { Vpc } from 'aws-cdk-lib/aws-ec2';
-
-import { Annotations, Match } from 'aws-cdk-lib/assertions';
-import { App, Aspects, Stack } from 'aws-cdk-lib';
-import { AwsSolutionsChecks, NagSuppressions } from 'cdk-nag';
-import { ProjectKind } from '../lib';
-
-describe('Pipeline cdk-nag AwsSolutions Pack', () => {
- let stack: Stack;
- let app: App;
- let vpc: Vpc;
- let imageRepo: Repository;
- let newStack: Stack;
- beforeAll(() => {
- // GIVEN
- app = new App();
- const env = { account: '12341234', region: 'eu-central-1' };
- newStack = new Stack(app, 'RepoStack', { env });
- imageRepo = new Repository(newStack, 'Repository', {});
- vpc = new Vpc(newStack, 'Bucket', {});
-
- stack = new EmbeddedLinuxPipelineStack(app, 'MyTestStack', {
- env,
- imageRepo,
- vpc,
- projectKind: ProjectKind.PokyAmi,
- });
-
- NagSuppressions.addStackSuppressions(stack, [
- {
- id: 'CdkNagValidationFailure',
- reason: 'Multiple Validation Failures.',
- },
- {
- id: 'AwsSolutions-CB3',
- reason: 'CodeBuild Privilege mode is required for this pipeline.',
- },
-
- {
- id: 'AwsSolutions-IAM4',
- reason: 'TODO: Re-evaluate managed policies per resources.',
- },
- ]);
-
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/VMImportRole/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason: 'Read permissions needed on bucket.',
- appliesTo: [
- {
- regex: '/Resource::/\\*$/g',
- },
- {
- regex: '/Resource::arn:aws:ec2:eu-central-1::snapshot/\\*$/g',
- },
- {
- regex: '/Resource::\\*$/g',
- },
- ],
- },
- ]
- );
-
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/EmbeddedLinuxBuildProject/Role/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'This is a default CDK created role, with default policy permissions.',
- },
- ]
- );
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/EmbeddedLinuxBuildProject/PolicyDocument/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'This is a default CDK created policy, with default policy permissions.',
- },
- ]
- );
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/EmbeddedLinuxPipeline/Role/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'This is a default CDK created policy, with default policy permissions.',
- },
- ]
- );
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/EmbeddedLinuxPipeline/Source/Source/CodePipelineActionRole/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'This is a default CDK created policy, with default policy permissions.',
- },
- ]
- );
-
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'This is a default CDK created policy, with default policy permissions.',
- },
- ]
- );
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/EmbeddedLinuxPipeline/Artifact/Artifact/CodePipelineActionRole/DefaultPolicy/Resource',
- [
- {
- id: 'AwsSolutions-IAM5',
- reason:
- 'This is a default CDK created policy, with default policy permissions.',
- },
- ]
- );
- NagSuppressions.addResourceSuppressionsByPath(
- stack,
- '/MyTestStack/OSImageCheckOnStart/Resource',
- [
- {
- id: 'AwsSolutions-L1',
- reason: 'There is no latest PYTHON version to set.',
- },
- ]
- );
- // WHEN
- Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
- });
-
- // THEN
- test('No unsuppressed Warnings', () => {
- const warnings = Annotations.fromStack(stack).findWarning(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
-
- expect(warnings).toHaveLength(0);
- });
-
- test('No unsuppressed Errors', () => {
- const errors = Annotations.fromStack(stack).findError(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
-
- expect(errors).toHaveLength(0);
- });
-});
diff --git a/test/embedded-linux-pipeline.test.ts b/test/embedded-linux-pipeline.test.ts
deleted file mode 100644
index d84a914..0000000
--- a/test/embedded-linux-pipeline.test.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Template } from 'aws-cdk-lib/assertions';
-import { EmbeddedLinuxPipelineStack } from '../lib/embedded-linux-pipeline';
-import { Repository } from 'aws-cdk-lib/aws-ecr';
-import { Vpc } from 'aws-cdk-lib/aws-ec2';
-import { ProjectKind } from '../lib';
-import { normalizedTemplateFromStack } from './util';
-
-describe('Pipeline', () => {
- const env = { account: '12341234', region: 'eu-central-1' };
-
- test('Logs Have Retention', () => {
- const app = new cdk.App();
- const newStack = new cdk.Stack(app, 'RepoStack', { env });
- const imageRepo = new Repository(newStack, 'Repository', {});
- const vpc = new Vpc(newStack, 'Bucket', {});
-
- const stack = new EmbeddedLinuxPipelineStack(app, 'MyTestStack', {
- env,
- imageRepo,
- vpc,
- });
- const template = Template.fromStack(stack);
- template.resourceCountIs('AWS::Logs::LogGroup', 1);
- template.allResourcesProperties('AWS::Logs::LogGroup', {
- RetentionInDays: 3653,
- });
- });
-
- test('S3 Bucket Has Versioning Enabled', () => {
- const app = new cdk.App();
- const newStack = new cdk.Stack(app, 'RepoStack', { env });
- const imageRepo = new Repository(newStack, 'Repository', {});
- const vpc = new Vpc(newStack, 'Bucket', {});
-
- const stack = new EmbeddedLinuxPipelineStack(app, 'MyTestStack', {
- env,
- imageRepo,
- vpc,
- });
- const template = Template.fromStack(stack);
- template.allResourcesProperties('AWS::S3::Bucket', {
- VersioningConfiguration: { Status: 'Enabled' },
- });
- });
-
- test('Snapshot Poky Pipeline', () => {
- const app = new cdk.App();
- const newStack = new cdk.Stack(app, 'RepoStack', { env });
- const imageRepo = new Repository(newStack, 'Repository', {});
- const vpc = new Vpc(newStack, 'Bucket', {});
-
- const stack = new EmbeddedLinuxPipelineStack(app, 'MyTestStack', {
- env,
- imageRepo,
- vpc,
- });
- const template = Template.fromStack(stack);
- expect(template).toMatchSnapshot();
- });
-
- test('Snapshot Poky AMI Pipeline', () => {
- const app = new cdk.App();
- const newStack = new cdk.Stack(app, 'RepoStack', { env });
- const imageRepo = new Repository(newStack, 'Repository', {});
- const vpc = new Vpc(newStack, 'Bucket', {});
-
- const stack = new EmbeddedLinuxPipelineStack(app, 'MyTestStack', {
- env,
- imageRepo,
- vpc,
- projectKind: ProjectKind.PokyAmi,
- });
- const template = normalizedTemplateFromStack(stack);
- expect(template).toMatchSnapshot();
- });
-
- test('Poky AMI Pipeline - check role name trim', () => {
- const app = new cdk.App();
- const newStack = new cdk.Stack(app, 'RepoStack', { env });
- const imageRepo = new Repository(newStack, 'Repository', {});
- const vpc = new Vpc(newStack, 'Bucket', {});
-
- const stack = new EmbeddedLinuxPipelineStack(
- app,
- 'PokyAmiPipeline2ExportsOutputFnGetAttPipelineVpc0543904ACidrBlock70DEC992',
- {
- env,
- imageRepo,
- vpc,
- projectKind: ProjectKind.PokyAmi,
- }
- );
- const template = normalizedTemplateFromStack(stack);
- expect(template).toMatchSnapshot();
- });
-});
diff --git a/test/network.test-nag.test.ts b/test/network.test-nag.test.ts
deleted file mode 100644
index cf085f9..0000000
--- a/test/network.test-nag.test.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { PipelineNetworkStack } from '../lib/network';
-import { Annotations, Match } from 'aws-cdk-lib/assertions';
-import { App, Aspects, Stack } from 'aws-cdk-lib';
-import { AwsSolutionsChecks } from 'cdk-nag';
-
-describe('Pipeline Networking cdk-nag AwsSolutions Pack', () => {
- const props = {
- env: { account: '111111111111', region: 'eu-central-1' },
- };
- let stack: Stack;
- let app: App;
- // In this case we can use beforeAll() over beforeEach() since our tests
- // do not modify the state of the application
- beforeAll(() => {
- // GIVEN
- app = new App();
- stack = new PipelineNetworkStack(app, 'PipelineNetworkStack', props);
-
- // WHEN
- Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
- });
-
- // THEN
- test('No unsuppressed Warnings', () => {
- const warnings = Annotations.fromStack(stack).findWarning(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(warnings).toHaveLength(0);
- });
-
- test('No unsuppressed Errors', () => {
- const errors = Annotations.fromStack(stack).findError(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(errors).toHaveLength(0);
- });
-});
diff --git a/test/network.test.ts b/test/network.test.ts
deleted file mode 100644
index 27609ee..0000000
--- a/test/network.test.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Template } from 'aws-cdk-lib/assertions';
-import { PipelineNetworkStack } from '../lib/network';
-
-describe('Pipeline Networking', () => {
- const props = {
- env: { account: '111111111111', region: 'eu-central-1' },
- };
-
- test('Logs Have Retention Period', () => {
- const app = new cdk.App();
- const stack = new PipelineNetworkStack(app, 'PipelineNetworkStack', props);
- const template = Template.fromStack(stack);
- template.resourceCountIs('AWS::Logs::LogGroup', 1);
- template.allResourcesProperties('AWS::Logs::LogGroup', {
- RetentionInDays: 3653,
- });
- });
-
- test('Snapshot', () => {
- const app = new cdk.App();
- const stack = new PipelineNetworkStack(app, 'PipelineNetworkStack', props);
- const template = Template.fromStack(stack);
- expect(template).toMatchSnapshot();
- });
-});
diff --git a/test/source-repo-nag.test.ts b/test/source-repo-nag.test.ts
deleted file mode 100644
index 7e6ecd0..0000000
--- a/test/source-repo-nag.test.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { SourceRepo, ProjectKind } from '../lib/constructs/source-repo';
-
-import { Annotations, Match } from 'aws-cdk-lib/assertions';
-import { App, Aspects, Stack } from 'aws-cdk-lib';
-import { AwsSolutionsChecks } from 'cdk-nag';
-
-describe('Demo Source Repository cdk-nag AwsSolutions Pack', () => {
- let stack: Stack;
- let app: App;
-
- beforeAll(() => {
- // GIVEN
- const props = {
- env: { account: '12341234', region: 'eu-central-1' },
- kind: ProjectKind.Poky,
- repoName: 'charlie',
- };
-
- app = new App();
- stack = new Stack(app, 'TestStack', props);
- new SourceRepo(stack, 'MyTestStack', props);
-
- // WHEN
- Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));
- });
-
- // THEN
- test('No unsuppressed Warnings', () => {
- const warnings = Annotations.fromStack(stack).findWarning(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(warnings).toHaveLength(0);
- });
-
- test('No unsuppressed Errors', () => {
- const errors = Annotations.fromStack(stack).findError(
- '*',
- Match.stringLikeRegexp('AwsSolutions-.*')
- );
- expect(errors).toHaveLength(0);
- });
-});
diff --git a/test/source-repo.test.ts b/test/source-repo.test.ts
deleted file mode 100644
index 0ecaab0..0000000
--- a/test/source-repo.test.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import * as cdk from 'aws-cdk-lib';
-import { Template } from 'aws-cdk-lib/assertions';
-import { SourceRepo, ProjectKind } from '../lib/constructs/source-repo';
-
-describe('Pipeline Source Repository', () => {
- const props = {
- env: { account: '12341234', region: 'eu-central-1' },
- kind: ProjectKind.Poky,
- repoName: 'charlie',
- };
-
- test('Snapshot', () => {
- const app = new cdk.App();
- const stack = new cdk.Stack(app, 'TestStack', props);
- new SourceRepo(stack, 'MyTestStack', props);
- const template = Template.fromStack(stack);
- expect(template).toMatchSnapshot();
- });
-});
diff --git a/test/util.ts b/test/util.ts
index 75afa2d..d071949 100644
--- a/test/util.ts
+++ b/test/util.ts
@@ -1,5 +1,5 @@
-import * as cdk from 'aws-cdk-lib';
-import { Template } from 'aws-cdk-lib/assertions';
+import * as cdk from "aws-cdk-lib";
+import { Template } from "aws-cdk-lib/assertions";
/**
* Remove hashed asset values and put a normalized name in instead.
@@ -9,9 +9,14 @@ export function normalizedTemplateFromStack(stack: cdk.Stack): Template {
const templateWithConstKeys = JSON.parse(
JSON.stringify(templateWithRandomKeys.toJSON()).replace(
/[a-z0-9]{64}\.(zip|sh)/g,
- 'arbitrary-file.ext'
- )
+ "arbitrary-file.ext",
+ ),
);
return templateWithConstKeys;
}
+
+export const DEFAULT_ENV = {
+ account: "111111111111",
+ region: "eu-central-1",
+};
diff --git a/tsconfig.json b/tsconfig.json
index a3c1c1c..b8ce2fc 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,10 +2,7 @@
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
- "lib": [
- "es2020",
- "dom"
- ],
+ "lib": ["es2020", "dom"],
"declaration": true,
"strict": true,
"noImplicitAny": true,
@@ -20,14 +17,9 @@
"inlineSources": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false,
- "typeRoots": [
- "./node_modules/@types"
- ],
- "outDir": "./dist"
+ "typeRoots": ["./node_modules/@types"],
+ "outDir": "./dist",
+ "resolveJsonModule": true
},
- "exclude": [
- "node_modules",
- "cdk.out",
- "dist"
- ]
+ "exclude": ["node_modules", "cdk.out", "dist"]
}
diff --git a/utils/build-assets.sh b/utils/build-assets.sh
new file mode 100755
index 0000000..425cd67
--- /dev/null
+++ b/utils/build-assets.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+
+WD="$SCRIPTPATH/.."
+
+# copy the folders into th dist folder
+if [ -d $WD/dist/source-repo ]; then rm -rf $WD/dist/source-repo; fi
+mkdir -p $WD/dist/source-repo
+cp -r $WD/source-repo $WD/dist
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..542ddf3
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4843 @@
+# This file is generated by running "yarn install" inside your project.
+# Manual changes might be lost - proceed with caution!
+
+__metadata:
+ version: 8
+ cacheKey: 10c0
+
+"@ampproject/remapping@npm:^2.2.0":
+ version: 2.3.0
+ resolution: "@ampproject/remapping@npm:2.3.0"
+ dependencies:
+ "@jridgewell/gen-mapping": "npm:^0.3.5"
+ "@jridgewell/trace-mapping": "npm:^0.3.24"
+ checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed
+ languageName: node
+ linkType: hard
+
+"@aws-cdk/asset-awscli-v1@npm:^2.2.208":
+ version: 2.2.224
+ resolution: "@aws-cdk/asset-awscli-v1@npm:2.2.224"
+ checksum: 10c0/9199f2fc67faf0a7606e76241ad94ba25e81e361125933b648186869223a3e1b10698469f84216e14ef2fc04487302c4a9431463cf564c53919302a8ef5552df
+ languageName: node
+ linkType: hard
+
+"@aws-cdk/asset-kubectl-v20@npm:^2.1.3":
+ version: 2.1.4
+ resolution: "@aws-cdk/asset-kubectl-v20@npm:2.1.4"
+ checksum: 10c0/ab9353104f8a49807c906ce0193a838c3c82f25e6fecfa5b5341d722730574b4b5824fbf62b17fe69f07df34796a3e77513a55327e05f34556b518b0424041d7
+ languageName: node
+ linkType: hard
+
+"@aws-cdk/asset-node-proxy-agent-v6@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "@aws-cdk/asset-node-proxy-agent-v6@npm:2.1.0"
+ checksum: 10c0/1ac7bccf82afee69c05241a5ad66345fbd468678ce633bb43c5921c7241a3186231b3b65f9ac6b9924933349c826a9470c79a3ddf14a03fbfce43f14c4d957f2
+ languageName: node
+ linkType: hard
+
+"@aws-cdk/cloud-assembly-schema@npm:^39.0.1":
+ version: 39.2.20
+ resolution: "@aws-cdk/cloud-assembly-schema@npm:39.2.20"
+ dependencies:
+ jsonschema: "npm:~1.4.1"
+ semver: "npm:^7.7.1"
+ checksum: 10c0/94a96dc318627f2e3dfdd984134ad106f1e592d2eae41cd690069726c2f7aa4155e9f5196e71281eb199dc61b5f23cfbdbef59b8fda84d44da7a1aefb4a109af
+ languageName: node
+ linkType: hard
+
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.26.2":
+ version: 7.26.2
+ resolution: "@babel/code-frame@npm:7.26.2"
+ dependencies:
+ "@babel/helper-validator-identifier": "npm:^7.25.9"
+ js-tokens: "npm:^4.0.0"
+ picocolors: "npm:^1.0.0"
+ checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8
+ languageName: node
+ linkType: hard
+
+"@babel/compat-data@npm:^7.26.5":
+ version: 7.26.8
+ resolution: "@babel/compat-data@npm:7.26.8"
+ checksum: 10c0/66408a0388c3457fff1c2f6c3a061278dd7b3d2f0455ea29bb7b187fa52c60ae8b4054b3c0a184e21e45f0eaac63cf390737bc7504d1f4a088a6e7f652c068ca
+ languageName: node
+ linkType: hard
+
+"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9":
+ version: 7.26.9
+ resolution: "@babel/core@npm:7.26.9"
+ dependencies:
+ "@ampproject/remapping": "npm:^2.2.0"
+ "@babel/code-frame": "npm:^7.26.2"
+ "@babel/generator": "npm:^7.26.9"
+ "@babel/helper-compilation-targets": "npm:^7.26.5"
+ "@babel/helper-module-transforms": "npm:^7.26.0"
+ "@babel/helpers": "npm:^7.26.9"
+ "@babel/parser": "npm:^7.26.9"
+ "@babel/template": "npm:^7.26.9"
+ "@babel/traverse": "npm:^7.26.9"
+ "@babel/types": "npm:^7.26.9"
+ convert-source-map: "npm:^2.0.0"
+ debug: "npm:^4.1.0"
+ gensync: "npm:^1.0.0-beta.2"
+ json5: "npm:^2.2.3"
+ semver: "npm:^6.3.1"
+ checksum: 10c0/ed7212ff42a9453765787019b7d191b167afcacd4bd8fec10b055344ef53fa0cc648c9a80159ae4ecf870016a6318731e087042dcb68d1a2a9d34eb290dc014b
+ languageName: node
+ linkType: hard
+
+"@babel/generator@npm:^7.26.9, @babel/generator@npm:^7.7.2":
+ version: 7.26.9
+ resolution: "@babel/generator@npm:7.26.9"
+ dependencies:
+ "@babel/parser": "npm:^7.26.9"
+ "@babel/types": "npm:^7.26.9"
+ "@jridgewell/gen-mapping": "npm:^0.3.5"
+ "@jridgewell/trace-mapping": "npm:^0.3.25"
+ jsesc: "npm:^3.0.2"
+ checksum: 10c0/6b78872128205224a9a9761b9ea7543a9a7902a04b82fc2f6801ead4de8f59056bab3fd17b1f834ca7b049555fc4c79234b9a6230dd9531a06525306050becad
+ languageName: node
+ linkType: hard
+
+"@babel/helper-compilation-targets@npm:^7.26.5":
+ version: 7.26.5
+ resolution: "@babel/helper-compilation-targets@npm:7.26.5"
+ dependencies:
+ "@babel/compat-data": "npm:^7.26.5"
+ "@babel/helper-validator-option": "npm:^7.25.9"
+ browserslist: "npm:^4.24.0"
+ lru-cache: "npm:^5.1.1"
+ semver: "npm:^6.3.1"
+ checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4
+ languageName: node
+ linkType: hard
+
+"@babel/helper-module-imports@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/helper-module-imports@npm:7.25.9"
+ dependencies:
+ "@babel/traverse": "npm:^7.25.9"
+ "@babel/types": "npm:^7.25.9"
+ checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70
+ languageName: node
+ linkType: hard
+
+"@babel/helper-module-transforms@npm:^7.26.0":
+ version: 7.26.0
+ resolution: "@babel/helper-module-transforms@npm:7.26.0"
+ dependencies:
+ "@babel/helper-module-imports": "npm:^7.25.9"
+ "@babel/helper-validator-identifier": "npm:^7.25.9"
+ "@babel/traverse": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a
+ languageName: node
+ linkType: hard
+
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0":
+ version: 7.26.5
+ resolution: "@babel/helper-plugin-utils@npm:7.26.5"
+ checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65
+ languageName: node
+ linkType: hard
+
+"@babel/helper-string-parser@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/helper-string-parser@npm:7.25.9"
+ checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6
+ languageName: node
+ linkType: hard
+
+"@babel/helper-validator-identifier@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/helper-validator-identifier@npm:7.25.9"
+ checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d
+ languageName: node
+ linkType: hard
+
+"@babel/helper-validator-option@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/helper-validator-option@npm:7.25.9"
+ checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e
+ languageName: node
+ linkType: hard
+
+"@babel/helpers@npm:^7.26.9":
+ version: 7.26.9
+ resolution: "@babel/helpers@npm:7.26.9"
+ dependencies:
+ "@babel/template": "npm:^7.26.9"
+ "@babel/types": "npm:^7.26.9"
+ checksum: 10c0/3d4dbc4a33fe4181ed810cac52318b578294745ceaec07e2f6ecccf6cda55d25e4bfcea8f085f333bf911c9e1fc13320248dd1d5315ab47ad82ce1077410df05
+ languageName: node
+ linkType: hard
+
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.26.9":
+ version: 7.26.9
+ resolution: "@babel/parser@npm:7.26.9"
+ dependencies:
+ "@babel/types": "npm:^7.26.9"
+ bin:
+ parser: ./bin/babel-parser.js
+ checksum: 10c0/4b9ef3c9a0d4c328e5e5544f50fe8932c36f8a2c851e7f14a85401487cd3da75cad72c2e1bcec1eac55599a6bbb2fdc091f274c4fcafa6bdd112d4915ff087fc
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-async-generators@npm:^7.8.4":
+ version: 7.8.4
+ resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.8.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-bigint@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-bigint@npm:7.8.3"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.8.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-class-properties@npm:^7.12.13":
+ version: 7.12.13
+ resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.12.13"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-class-static-block@npm:^7.14.5":
+ version: 7.14.5
+ resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.14.5"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-import-attributes@npm:^7.24.7":
+ version: 7.26.0
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-import-meta@npm:^7.10.4":
+ version: 7.10.4
+ resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.10.4"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-json-strings@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.8.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-jsx@npm:^7.7.2":
+ version: 7.25.9
+ resolution: "@babel/plugin-syntax-jsx@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/d56597aff4df39d3decda50193b6dfbe596ca53f437ff2934622ce19a743bf7f43492d3fb3308b0289f5cee2b825d99ceb56526a2b9e7b68bf04901546c5618c
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4":
+ version: 7.10.4
+ resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.10.4"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.8.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-numeric-separator@npm:^7.10.4":
+ version: 7.10.4
+ resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.10.4"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.8.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.8.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-optional-chaining@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.8.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5":
+ version: 7.14.5
+ resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.14.5"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-top-level-await@npm:^7.14.5":
+ version: 7.14.5
+ resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.14.5"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-typescript@npm:^7.7.2":
+ version: 7.25.9
+ resolution: "@babel/plugin-syntax-typescript@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/5192ebe11bd46aea68b7a60fd9555465c59af7e279e71126788e59121b86e00b505816685ab4782abe159232b0f73854e804b54449820b0d950b397ee158caa2
+ languageName: node
+ linkType: hard
+
+"@babel/template@npm:^7.26.9, @babel/template@npm:^7.3.3":
+ version: 7.26.9
+ resolution: "@babel/template@npm:7.26.9"
+ dependencies:
+ "@babel/code-frame": "npm:^7.26.2"
+ "@babel/parser": "npm:^7.26.9"
+ "@babel/types": "npm:^7.26.9"
+ checksum: 10c0/019b1c4129cc01ad63e17529089c2c559c74709d225f595eee017af227fee11ae8a97a6ab19ae6768b8aa22d8d75dcb60a00b28f52e9fa78140672d928bc1ae9
+ languageName: node
+ linkType: hard
+
+"@babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.9":
+ version: 7.26.9
+ resolution: "@babel/traverse@npm:7.26.9"
+ dependencies:
+ "@babel/code-frame": "npm:^7.26.2"
+ "@babel/generator": "npm:^7.26.9"
+ "@babel/parser": "npm:^7.26.9"
+ "@babel/template": "npm:^7.26.9"
+ "@babel/types": "npm:^7.26.9"
+ debug: "npm:^4.3.1"
+ globals: "npm:^11.1.0"
+ checksum: 10c0/51dd57fa39ea34d04816806bfead04c74f37301269d24c192d1406dc6e244fea99713b3b9c5f3e926d9ef6aa9cd5c062ad4f2fc1caa9cf843d5e864484ac955e
+ languageName: node
+ linkType: hard
+
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.9, @babel/types@npm:^7.3.3":
+ version: 7.26.9
+ resolution: "@babel/types@npm:7.26.9"
+ dependencies:
+ "@babel/helper-string-parser": "npm:^7.25.9"
+ "@babel/helper-validator-identifier": "npm:^7.25.9"
+ checksum: 10c0/999c56269ba00e5c57aa711fbe7ff071cd6990bafd1b978341ea7572cc78919986e2aa6ee51dacf4b6a7a6fa63ba4eb3f1a03cf55eee31b896a56d068b895964
+ languageName: node
+ linkType: hard
+
+"@balena/dockerignore@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "@balena/dockerignore@npm:1.0.2"
+ checksum: 10c0/0bcb067e86f6734ab943ce4ce9a7c8611f2e983a70bccebf9d2309db57695c09dded7faf5be49c929c4c9e9a9174ae55fc625626de0fb9958823c37423d12f4e
+ languageName: node
+ linkType: hard
+
+"@bcoe/v8-coverage@npm:^0.2.3":
+ version: 0.2.3
+ resolution: "@bcoe/v8-coverage@npm:0.2.3"
+ checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52
+ languageName: node
+ linkType: hard
+
+"@cspotcode/source-map-support@npm:^0.8.0":
+ version: 0.8.1
+ resolution: "@cspotcode/source-map-support@npm:0.8.1"
+ dependencies:
+ "@jridgewell/trace-mapping": "npm:0.3.9"
+ checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6
+ languageName: node
+ linkType: hard
+
+"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
+ version: 4.4.1
+ resolution: "@eslint-community/eslint-utils@npm:4.4.1"
+ dependencies:
+ eslint-visitor-keys: "npm:^3.4.3"
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252
+ languageName: node
+ linkType: hard
+
+"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1":
+ version: 4.12.1
+ resolution: "@eslint-community/regexpp@npm:4.12.1"
+ checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6
+ languageName: node
+ linkType: hard
+
+"@eslint/compat@npm:^1.2.4":
+ version: 1.2.6
+ resolution: "@eslint/compat@npm:1.2.6"
+ peerDependencies:
+ eslint: ^9.10.0
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+ checksum: 10c0/e767b62f1e43a1b4e3f9f1ac64546f8bcdf4f3fb84c504d8f1b0ea31a71f1607bcd11288c86c77b8ddd3d0bba9a9513d7203d4e6d15b1b3a1cff7718dea61b40
+ languageName: node
+ linkType: hard
+
+"@eslint/config-array@npm:^0.19.0":
+ version: 0.19.2
+ resolution: "@eslint/config-array@npm:0.19.2"
+ dependencies:
+ "@eslint/object-schema": "npm:^2.1.6"
+ debug: "npm:^4.3.1"
+ minimatch: "npm:^3.1.2"
+ checksum: 10c0/dd68da9abb32d336233ac4fe0db1e15a0a8d794b6e69abb9e57545d746a97f6f542496ff9db0d7e27fab1438546250d810d90b1904ac67677215b8d8e7573f3d
+ languageName: node
+ linkType: hard
+
+"@eslint/core@npm:^0.11.0":
+ version: 0.11.0
+ resolution: "@eslint/core@npm:0.11.0"
+ dependencies:
+ "@types/json-schema": "npm:^7.0.15"
+ checksum: 10c0/1e0671d035c908175f445864a7864cf6c6a8b67a5dfba8c47b2ac91e2d3ed36e8c1f2fd81d98a73264f8677055559699d4adb0f97d86588e616fc0dc9a4b86c9
+ languageName: node
+ linkType: hard
+
+"@eslint/eslintrc@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "@eslint/eslintrc@npm:3.2.0"
+ dependencies:
+ ajv: "npm:^6.12.4"
+ debug: "npm:^4.3.2"
+ espree: "npm:^10.0.1"
+ globals: "npm:^14.0.0"
+ ignore: "npm:^5.2.0"
+ import-fresh: "npm:^3.2.1"
+ js-yaml: "npm:^4.1.0"
+ minimatch: "npm:^3.1.2"
+ strip-json-comments: "npm:^3.1.1"
+ checksum: 10c0/43867a07ff9884d895d9855edba41acf325ef7664a8df41d957135a81a477ff4df4196f5f74dc3382627e5cc8b7ad6b815c2cea1b58f04a75aced7c43414ab8b
+ languageName: node
+ linkType: hard
+
+"@eslint/js@npm:9.20.0, @eslint/js@npm:^9.16.0":
+ version: 9.20.0
+ resolution: "@eslint/js@npm:9.20.0"
+ checksum: 10c0/10e7b5b9e628b5192e8fc6b0ecd27cf48322947e83e999ff60f9f9e44ac8d499138bcb9383cbfa6e51e780d53b4e76ccc2d1753b108b7173b8404fd484d37328
+ languageName: node
+ linkType: hard
+
+"@eslint/object-schema@npm:^2.1.6":
+ version: 2.1.6
+ resolution: "@eslint/object-schema@npm:2.1.6"
+ checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56
+ languageName: node
+ linkType: hard
+
+"@eslint/plugin-kit@npm:^0.2.5":
+ version: 0.2.6
+ resolution: "@eslint/plugin-kit@npm:0.2.6"
+ dependencies:
+ "@eslint/core": "npm:^0.11.0"
+ levn: "npm:^0.4.1"
+ checksum: 10c0/2d4cc4497c62e2a6437039fdd778911d768b0706c6256568c4ff1ad8724f663b2fa04a5873db6a20a812be11166e78e0346acfde4b7149e10e92f7b0075a976e
+ languageName: node
+ linkType: hard
+
+"@gerrit0/mini-shiki@npm:^1.24.0":
+ version: 1.27.2
+ resolution: "@gerrit0/mini-shiki@npm:1.27.2"
+ dependencies:
+ "@shikijs/engine-oniguruma": "npm:^1.27.2"
+ "@shikijs/types": "npm:^1.27.2"
+ "@shikijs/vscode-textmate": "npm:^10.0.1"
+ checksum: 10c0/aee681637d123e0e8c9ec154b117ce166dd8b4b9896341e617fef16d0b21ef91a17f6f90cc874137e33ca85b5898817b59bb8aea178cdb2fa6e75b0fff3640c2
+ languageName: node
+ linkType: hard
+
+"@humanfs/core@npm:^0.19.1":
+ version: 0.19.1
+ resolution: "@humanfs/core@npm:0.19.1"
+ checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67
+ languageName: node
+ linkType: hard
+
+"@humanfs/node@npm:^0.16.6":
+ version: 0.16.6
+ resolution: "@humanfs/node@npm:0.16.6"
+ dependencies:
+ "@humanfs/core": "npm:^0.19.1"
+ "@humanwhocodes/retry": "npm:^0.3.0"
+ checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/module-importer@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "@humanwhocodes/module-importer@npm:1.0.1"
+ checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/retry@npm:^0.3.0":
+ version: 0.3.1
+ resolution: "@humanwhocodes/retry@npm:0.3.1"
+ checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/retry@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "@humanwhocodes/retry@npm:0.4.1"
+ checksum: 10c0/be7bb6841c4c01d0b767d9bb1ec1c9359ee61421ce8ba66c249d035c5acdfd080f32d55a5c9e859cdd7868788b8935774f65b2caf24ec0b7bd7bf333791f063b
+ languageName: node
+ linkType: hard
+
+"@isaacs/fs-minipass@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "@isaacs/fs-minipass@npm:4.0.1"
+ dependencies:
+ minipass: "npm:^7.0.4"
+ checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2
+ languageName: node
+ linkType: hard
+
+"@istanbuljs/load-nyc-config@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "@istanbuljs/load-nyc-config@npm:1.1.0"
+ dependencies:
+ camelcase: "npm:^5.3.1"
+ find-up: "npm:^4.1.0"
+ get-package-type: "npm:^0.1.0"
+ js-yaml: "npm:^3.13.1"
+ resolve-from: "npm:^5.0.0"
+ checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42
+ languageName: node
+ linkType: hard
+
+"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3":
+ version: 0.1.3
+ resolution: "@istanbuljs/schema@npm:0.1.3"
+ checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a
+ languageName: node
+ linkType: hard
+
+"@jest/console@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/console@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ chalk: "npm:^4.0.0"
+ jest-message-util: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ slash: "npm:^3.0.0"
+ checksum: 10c0/7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c
+ languageName: node
+ linkType: hard
+
+"@jest/core@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/core@npm:29.7.0"
+ dependencies:
+ "@jest/console": "npm:^29.7.0"
+ "@jest/reporters": "npm:^29.7.0"
+ "@jest/test-result": "npm:^29.7.0"
+ "@jest/transform": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ ansi-escapes: "npm:^4.2.1"
+ chalk: "npm:^4.0.0"
+ ci-info: "npm:^3.2.0"
+ exit: "npm:^0.1.2"
+ graceful-fs: "npm:^4.2.9"
+ jest-changed-files: "npm:^29.7.0"
+ jest-config: "npm:^29.7.0"
+ jest-haste-map: "npm:^29.7.0"
+ jest-message-util: "npm:^29.7.0"
+ jest-regex-util: "npm:^29.6.3"
+ jest-resolve: "npm:^29.7.0"
+ jest-resolve-dependencies: "npm:^29.7.0"
+ jest-runner: "npm:^29.7.0"
+ jest-runtime: "npm:^29.7.0"
+ jest-snapshot: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ jest-validate: "npm:^29.7.0"
+ jest-watcher: "npm:^29.7.0"
+ micromatch: "npm:^4.0.4"
+ pretty-format: "npm:^29.7.0"
+ slash: "npm:^3.0.0"
+ strip-ansi: "npm:^6.0.0"
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+ checksum: 10c0/934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2
+ languageName: node
+ linkType: hard
+
+"@jest/environment@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/environment@npm:29.7.0"
+ dependencies:
+ "@jest/fake-timers": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ jest-mock: "npm:^29.7.0"
+ checksum: 10c0/c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86
+ languageName: node
+ linkType: hard
+
+"@jest/expect-utils@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/expect-utils@npm:29.7.0"
+ dependencies:
+ jest-get-type: "npm:^29.6.3"
+ checksum: 10c0/60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a
+ languageName: node
+ linkType: hard
+
+"@jest/expect@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/expect@npm:29.7.0"
+ dependencies:
+ expect: "npm:^29.7.0"
+ jest-snapshot: "npm:^29.7.0"
+ checksum: 10c0/b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e
+ languageName: node
+ linkType: hard
+
+"@jest/fake-timers@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/fake-timers@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ "@sinonjs/fake-timers": "npm:^10.0.2"
+ "@types/node": "npm:*"
+ jest-message-util: "npm:^29.7.0"
+ jest-mock: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ checksum: 10c0/cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c
+ languageName: node
+ linkType: hard
+
+"@jest/globals@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/globals@npm:29.7.0"
+ dependencies:
+ "@jest/environment": "npm:^29.7.0"
+ "@jest/expect": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ jest-mock: "npm:^29.7.0"
+ checksum: 10c0/a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea
+ languageName: node
+ linkType: hard
+
+"@jest/reporters@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/reporters@npm:29.7.0"
+ dependencies:
+ "@bcoe/v8-coverage": "npm:^0.2.3"
+ "@jest/console": "npm:^29.7.0"
+ "@jest/test-result": "npm:^29.7.0"
+ "@jest/transform": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@jridgewell/trace-mapping": "npm:^0.3.18"
+ "@types/node": "npm:*"
+ chalk: "npm:^4.0.0"
+ collect-v8-coverage: "npm:^1.0.0"
+ exit: "npm:^0.1.2"
+ glob: "npm:^7.1.3"
+ graceful-fs: "npm:^4.2.9"
+ istanbul-lib-coverage: "npm:^3.0.0"
+ istanbul-lib-instrument: "npm:^6.0.0"
+ istanbul-lib-report: "npm:^3.0.0"
+ istanbul-lib-source-maps: "npm:^4.0.0"
+ istanbul-reports: "npm:^3.1.3"
+ jest-message-util: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ jest-worker: "npm:^29.7.0"
+ slash: "npm:^3.0.0"
+ string-length: "npm:^4.0.1"
+ strip-ansi: "npm:^6.0.0"
+ v8-to-istanbul: "npm:^9.0.1"
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+ checksum: 10c0/a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2
+ languageName: node
+ linkType: hard
+
+"@jest/schemas@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "@jest/schemas@npm:29.6.3"
+ dependencies:
+ "@sinclair/typebox": "npm:^0.27.8"
+ checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be
+ languageName: node
+ linkType: hard
+
+"@jest/source-map@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "@jest/source-map@npm:29.6.3"
+ dependencies:
+ "@jridgewell/trace-mapping": "npm:^0.3.18"
+ callsites: "npm:^3.0.0"
+ graceful-fs: "npm:^4.2.9"
+ checksum: 10c0/a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219
+ languageName: node
+ linkType: hard
+
+"@jest/test-result@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/test-result@npm:29.7.0"
+ dependencies:
+ "@jest/console": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/istanbul-lib-coverage": "npm:^2.0.0"
+ collect-v8-coverage: "npm:^1.0.0"
+ checksum: 10c0/7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04
+ languageName: node
+ linkType: hard
+
+"@jest/test-sequencer@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/test-sequencer@npm:29.7.0"
+ dependencies:
+ "@jest/test-result": "npm:^29.7.0"
+ graceful-fs: "npm:^4.2.9"
+ jest-haste-map: "npm:^29.7.0"
+ slash: "npm:^3.0.0"
+ checksum: 10c0/593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b
+ languageName: node
+ linkType: hard
+
+"@jest/transform@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/transform@npm:29.7.0"
+ dependencies:
+ "@babel/core": "npm:^7.11.6"
+ "@jest/types": "npm:^29.6.3"
+ "@jridgewell/trace-mapping": "npm:^0.3.18"
+ babel-plugin-istanbul: "npm:^6.1.1"
+ chalk: "npm:^4.0.0"
+ convert-source-map: "npm:^2.0.0"
+ fast-json-stable-stringify: "npm:^2.1.0"
+ graceful-fs: "npm:^4.2.9"
+ jest-haste-map: "npm:^29.7.0"
+ jest-regex-util: "npm:^29.6.3"
+ jest-util: "npm:^29.7.0"
+ micromatch: "npm:^4.0.4"
+ pirates: "npm:^4.0.4"
+ slash: "npm:^3.0.0"
+ write-file-atomic: "npm:^4.0.2"
+ checksum: 10c0/7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6
+ languageName: node
+ linkType: hard
+
+"@jest/types@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "@jest/types@npm:29.6.3"
+ dependencies:
+ "@jest/schemas": "npm:^29.6.3"
+ "@types/istanbul-lib-coverage": "npm:^2.0.0"
+ "@types/istanbul-reports": "npm:^3.0.0"
+ "@types/node": "npm:*"
+ "@types/yargs": "npm:^17.0.8"
+ chalk: "npm:^4.0.0"
+ checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0
+ languageName: node
+ linkType: hard
+
+"@jridgewell/gen-mapping@npm:^0.3.5":
+ version: 0.3.8
+ resolution: "@jridgewell/gen-mapping@npm:0.3.8"
+ dependencies:
+ "@jridgewell/set-array": "npm:^1.2.1"
+ "@jridgewell/sourcemap-codec": "npm:^1.4.10"
+ "@jridgewell/trace-mapping": "npm:^0.3.24"
+ checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a
+ languageName: node
+ linkType: hard
+
+"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0":
+ version: 3.1.2
+ resolution: "@jridgewell/resolve-uri@npm:3.1.2"
+ checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e
+ languageName: node
+ linkType: hard
+
+"@jridgewell/set-array@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@jridgewell/set-array@npm:1.2.1"
+ checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4
+ languageName: node
+ linkType: hard
+
+"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14":
+ version: 1.5.0
+ resolution: "@jridgewell/sourcemap-codec@npm:1.5.0"
+ checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18
+ languageName: node
+ linkType: hard
+
+"@jridgewell/trace-mapping@npm:0.3.9":
+ version: 0.3.9
+ resolution: "@jridgewell/trace-mapping@npm:0.3.9"
+ dependencies:
+ "@jridgewell/resolve-uri": "npm:^3.0.3"
+ "@jridgewell/sourcemap-codec": "npm:^1.4.10"
+ checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b
+ languageName: node
+ linkType: hard
+
+"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
+ version: 0.3.25
+ resolution: "@jridgewell/trace-mapping@npm:0.3.25"
+ dependencies:
+ "@jridgewell/resolve-uri": "npm:^3.1.0"
+ "@jridgewell/sourcemap-codec": "npm:^1.4.14"
+ checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4
+ languageName: node
+ linkType: hard
+
+"@microsoft/tsdoc-config@npm:0.17.1":
+ version: 0.17.1
+ resolution: "@microsoft/tsdoc-config@npm:0.17.1"
+ dependencies:
+ "@microsoft/tsdoc": "npm:0.15.1"
+ ajv: "npm:~8.12.0"
+ jju: "npm:~1.4.0"
+ resolve: "npm:~1.22.2"
+ checksum: 10c0/a686355796f492f27af17e2a17d615221309caf4d9f9047a5a8f17f8625c467c4c81e2a7923ddafd71b892631d5e5013c4b8cc49c5867d3cc1d260fd90c1413d
+ languageName: node
+ linkType: hard
+
+"@microsoft/tsdoc@npm:0.15.1":
+ version: 0.15.1
+ resolution: "@microsoft/tsdoc@npm:0.15.1"
+ checksum: 10c0/09948691fac56c45a0d1920de478d66a30371a325bd81addc92eea5654d95106ce173c440fea1a1bd5bb95b3a544b6d4def7bb0b5a846c05d043575d8369a20c
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.scandir@npm:2.1.5":
+ version: 2.1.5
+ resolution: "@nodelib/fs.scandir@npm:2.1.5"
+ dependencies:
+ "@nodelib/fs.stat": "npm:2.0.5"
+ run-parallel: "npm:^1.1.9"
+ checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
+ version: 2.0.5
+ resolution: "@nodelib/fs.stat@npm:2.0.5"
+ checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.walk@npm:^1.2.3":
+ version: 1.2.8
+ resolution: "@nodelib/fs.walk@npm:1.2.8"
+ dependencies:
+ "@nodelib/fs.scandir": "npm:2.1.5"
+ fastq: "npm:^1.6.0"
+ checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1
+ languageName: node
+ linkType: hard
+
+"@npmcli/agent@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "@npmcli/agent@npm:3.0.0"
+ dependencies:
+ agent-base: "npm:^7.1.0"
+ http-proxy-agent: "npm:^7.0.0"
+ https-proxy-agent: "npm:^7.0.1"
+ lru-cache: "npm:^10.0.1"
+ socks-proxy-agent: "npm:^8.0.3"
+ checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271
+ languageName: node
+ linkType: hard
+
+"@npmcli/fs@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@npmcli/fs@npm:4.0.0"
+ dependencies:
+ semver: "npm:^7.3.5"
+ checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5
+ languageName: node
+ linkType: hard
+
+"@pkgr/core@npm:^0.1.0":
+ version: 0.1.1
+ resolution: "@pkgr/core@npm:0.1.1"
+ checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8
+ languageName: node
+ linkType: hard
+
+"@shikijs/engine-oniguruma@npm:^1.27.2":
+ version: 1.29.2
+ resolution: "@shikijs/engine-oniguruma@npm:1.29.2"
+ dependencies:
+ "@shikijs/types": "npm:1.29.2"
+ "@shikijs/vscode-textmate": "npm:^10.0.1"
+ checksum: 10c0/87d77e05af7fe862df40899a7034cbbd48d3635e27706873025e5035be578584d012f850208e97ca484d5e876bf802d4e23d0394d25026adb678eeb1d1f340ff
+ languageName: node
+ linkType: hard
+
+"@shikijs/types@npm:1.29.2, @shikijs/types@npm:^1.27.2":
+ version: 1.29.2
+ resolution: "@shikijs/types@npm:1.29.2"
+ dependencies:
+ "@shikijs/vscode-textmate": "npm:^10.0.1"
+ "@types/hast": "npm:^3.0.4"
+ checksum: 10c0/37b4ac315effc03e7185aca1da0c2631ac55bdf613897476bd1d879105c41f86ccce6ebd0b78779513d88cc2ee371039f7efd95d604f77f21f180791978822b3
+ languageName: node
+ linkType: hard
+
+"@shikijs/vscode-textmate@npm:^10.0.1":
+ version: 10.0.2
+ resolution: "@shikijs/vscode-textmate@npm:10.0.2"
+ checksum: 10c0/36b682d691088ec244de292dc8f91b808f95c89466af421cf84cbab92230f03c8348649c14b3251991b10ce632b0c715e416e992dd5f28ff3221dc2693fd9462
+ languageName: node
+ linkType: hard
+
+"@sinclair/typebox@npm:^0.27.8":
+ version: 0.27.8
+ resolution: "@sinclair/typebox@npm:0.27.8"
+ checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e
+ languageName: node
+ linkType: hard
+
+"@sinonjs/commons@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "@sinonjs/commons@npm:3.0.1"
+ dependencies:
+ type-detect: "npm:4.0.8"
+ checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403
+ languageName: node
+ linkType: hard
+
+"@sinonjs/fake-timers@npm:^10.0.2":
+ version: 10.3.0
+ resolution: "@sinonjs/fake-timers@npm:10.3.0"
+ dependencies:
+ "@sinonjs/commons": "npm:^3.0.0"
+ checksum: 10c0/2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63
+ languageName: node
+ linkType: hard
+
+"@tsconfig/node10@npm:^1.0.7":
+ version: 1.0.11
+ resolution: "@tsconfig/node10@npm:1.0.11"
+ checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c
+ languageName: node
+ linkType: hard
+
+"@tsconfig/node12@npm:^1.0.7":
+ version: 1.0.11
+ resolution: "@tsconfig/node12@npm:1.0.11"
+ checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9
+ languageName: node
+ linkType: hard
+
+"@tsconfig/node14@npm:^1.0.0":
+ version: 1.0.3
+ resolution: "@tsconfig/node14@npm:1.0.3"
+ checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44
+ languageName: node
+ linkType: hard
+
+"@tsconfig/node16@npm:^1.0.2":
+ version: 1.0.4
+ resolution: "@tsconfig/node16@npm:1.0.4"
+ checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb
+ languageName: node
+ linkType: hard
+
+"@types/babel__core@npm:^7.1.14":
+ version: 7.20.5
+ resolution: "@types/babel__core@npm:7.20.5"
+ dependencies:
+ "@babel/parser": "npm:^7.20.7"
+ "@babel/types": "npm:^7.20.7"
+ "@types/babel__generator": "npm:*"
+ "@types/babel__template": "npm:*"
+ "@types/babel__traverse": "npm:*"
+ checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff
+ languageName: node
+ linkType: hard
+
+"@types/babel__generator@npm:*":
+ version: 7.6.8
+ resolution: "@types/babel__generator@npm:7.6.8"
+ dependencies:
+ "@babel/types": "npm:^7.0.0"
+ checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2
+ languageName: node
+ linkType: hard
+
+"@types/babel__template@npm:*":
+ version: 7.4.4
+ resolution: "@types/babel__template@npm:7.4.4"
+ dependencies:
+ "@babel/parser": "npm:^7.1.0"
+ "@babel/types": "npm:^7.0.0"
+ checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b
+ languageName: node
+ linkType: hard
+
+"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6":
+ version: 7.20.6
+ resolution: "@types/babel__traverse@npm:7.20.6"
+ dependencies:
+ "@babel/types": "npm:^7.20.7"
+ checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888
+ languageName: node
+ linkType: hard
+
+"@types/estree@npm:^1.0.6":
+ version: 1.0.6
+ resolution: "@types/estree@npm:1.0.6"
+ checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a
+ languageName: node
+ linkType: hard
+
+"@types/graceful-fs@npm:^4.1.3":
+ version: 4.1.9
+ resolution: "@types/graceful-fs@npm:4.1.9"
+ dependencies:
+ "@types/node": "npm:*"
+ checksum: 10c0/235d2fc69741448e853333b7c3d1180a966dd2b8972c8cbcd6b2a0c6cd7f8d582ab2b8e58219dbc62cce8f1b40aa317ff78ea2201cdd8249da5025adebed6f0b
+ languageName: node
+ linkType: hard
+
+"@types/hast@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "@types/hast@npm:3.0.4"
+ dependencies:
+ "@types/unist": "npm:*"
+ checksum: 10c0/3249781a511b38f1d330fd1e3344eed3c4e7ea8eff82e835d35da78e637480d36fad37a78be5a7aed8465d237ad0446abc1150859d0fde395354ea634decf9f7
+ languageName: node
+ linkType: hard
+
+"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1":
+ version: 2.0.6
+ resolution: "@types/istanbul-lib-coverage@npm:2.0.6"
+ checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7
+ languageName: node
+ linkType: hard
+
+"@types/istanbul-lib-report@npm:*":
+ version: 3.0.3
+ resolution: "@types/istanbul-lib-report@npm:3.0.3"
+ dependencies:
+ "@types/istanbul-lib-coverage": "npm:*"
+ checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c
+ languageName: node
+ linkType: hard
+
+"@types/istanbul-reports@npm:^3.0.0":
+ version: 3.0.4
+ resolution: "@types/istanbul-reports@npm:3.0.4"
+ dependencies:
+ "@types/istanbul-lib-report": "npm:*"
+ checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee
+ languageName: node
+ linkType: hard
+
+"@types/jest@npm:^29.5.14":
+ version: 29.5.14
+ resolution: "@types/jest@npm:29.5.14"
+ dependencies:
+ expect: "npm:^29.0.0"
+ pretty-format: "npm:^29.0.0"
+ checksum: 10c0/18e0712d818890db8a8dab3d91e9ea9f7f19e3f83c2e50b312f557017dc81466207a71f3ed79cf4428e813ba939954fa26ffa0a9a7f153181ba174581b1c2aed
+ languageName: node
+ linkType: hard
+
+"@types/json-schema@npm:^7.0.15":
+ version: 7.0.15
+ resolution: "@types/json-schema@npm:7.0.15"
+ checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db
+ languageName: node
+ linkType: hard
+
+"@types/node@npm:*":
+ version: 22.13.4
+ resolution: "@types/node@npm:22.13.4"
+ dependencies:
+ undici-types: "npm:~6.20.0"
+ checksum: 10c0/3a234fa7766a3efc382cf81f66f474c26cdab2f54f43f757634c81c0444eb2160c2dabbde9741e4983078a318a88515b65416b5f1ab5478548579d7b3ead1d95
+ languageName: node
+ linkType: hard
+
+"@types/node@npm:20.14.8":
+ version: 20.14.8
+ resolution: "@types/node@npm:20.14.8"
+ dependencies:
+ undici-types: "npm:~5.26.4"
+ checksum: 10c0/06d4643fa3b179b41fe19f9c75c240278ca1f7a313b3b837bc36ea119499c7ad77f06bbe72694ac04aa91ec77fe747baa09b889f4c435450c1724a26bd55f160
+ languageName: node
+ linkType: hard
+
+"@types/stack-utils@npm:^2.0.0":
+ version: 2.0.3
+ resolution: "@types/stack-utils@npm:2.0.3"
+ checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c
+ languageName: node
+ linkType: hard
+
+"@types/unist@npm:*":
+ version: 3.0.3
+ resolution: "@types/unist@npm:3.0.3"
+ checksum: 10c0/2b1e4adcab78388e088fcc3c0ae8700f76619dbcb4741d7d201f87e2cb346bfc29a89003cfea2d76c996e1061452e14fcd737e8b25aacf949c1f2d6b2bc3dd60
+ languageName: node
+ linkType: hard
+
+"@types/yargs-parser@npm:*":
+ version: 21.0.3
+ resolution: "@types/yargs-parser@npm:21.0.3"
+ checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0
+ languageName: node
+ linkType: hard
+
+"@types/yargs@npm:^17.0.8":
+ version: 17.0.33
+ resolution: "@types/yargs@npm:17.0.33"
+ dependencies:
+ "@types/yargs-parser": "npm:*"
+ checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/eslint-plugin@npm:8.24.1, @typescript-eslint/eslint-plugin@npm:^8.18.0":
+ version: 8.24.1
+ resolution: "@typescript-eslint/eslint-plugin@npm:8.24.1"
+ dependencies:
+ "@eslint-community/regexpp": "npm:^4.10.0"
+ "@typescript-eslint/scope-manager": "npm:8.24.1"
+ "@typescript-eslint/type-utils": "npm:8.24.1"
+ "@typescript-eslint/utils": "npm:8.24.1"
+ "@typescript-eslint/visitor-keys": "npm:8.24.1"
+ graphemer: "npm:^1.4.0"
+ ignore: "npm:^5.3.1"
+ natural-compare: "npm:^1.4.0"
+ ts-api-utils: "npm:^2.0.1"
+ peerDependencies:
+ "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/fe5f56f248370f40322a7cb2d96fbab724a7a8892895e3d41027c9a1df309916433633e04df84a1d3f9535d282953738b1ad627d8af37ab288a39a6e411afd76
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/parser@npm:8.24.1, @typescript-eslint/parser@npm:^8.18.0":
+ version: 8.24.1
+ resolution: "@typescript-eslint/parser@npm:8.24.1"
+ dependencies:
+ "@typescript-eslint/scope-manager": "npm:8.24.1"
+ "@typescript-eslint/types": "npm:8.24.1"
+ "@typescript-eslint/typescript-estree": "npm:8.24.1"
+ "@typescript-eslint/visitor-keys": "npm:8.24.1"
+ debug: "npm:^4.3.4"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/9de557698c8debf3de06b6adf6aa06a8345e0e38600e5ccbeda62270d1a4a757dfa191db89d4e86cf373103a11bef1965c9d9889f622c51f4f26d1bf12394ae3
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/scope-manager@npm:8.24.1":
+ version: 8.24.1
+ resolution: "@typescript-eslint/scope-manager@npm:8.24.1"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.24.1"
+ "@typescript-eslint/visitor-keys": "npm:8.24.1"
+ checksum: 10c0/779880743ed7ab67fe477f1ad5648bbd77ad69b4663b5a42024112004c8f231049b1e4eeb67e260005769c3bb005049e00a80b885e19d593ffb080bd39f4fa94
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/type-utils@npm:8.24.1":
+ version: 8.24.1
+ resolution: "@typescript-eslint/type-utils@npm:8.24.1"
+ dependencies:
+ "@typescript-eslint/typescript-estree": "npm:8.24.1"
+ "@typescript-eslint/utils": "npm:8.24.1"
+ debug: "npm:^4.3.4"
+ ts-api-utils: "npm:^2.0.1"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/ba248bc12068383374d9d077f9cca1815f347ea008d04d08ad7a54dbef70189a0da7872246f8369e6d30938fa7e408dadcda0ae71041be68fc836c886dd9c3ab
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/types@npm:8.24.1":
+ version: 8.24.1
+ resolution: "@typescript-eslint/types@npm:8.24.1"
+ checksum: 10c0/ebb40ce16c746ef236dbcc25cb2e6950753ca6fb34d04ed7d477016370de1fdaf7402ed4569673c6ff14bf60af7124ff45c6ddd9328d2f8c94dc04178368e2a3
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/typescript-estree@npm:8.24.1":
+ version: 8.24.1
+ resolution: "@typescript-eslint/typescript-estree@npm:8.24.1"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.24.1"
+ "@typescript-eslint/visitor-keys": "npm:8.24.1"
+ debug: "npm:^4.3.4"
+ fast-glob: "npm:^3.3.2"
+ is-glob: "npm:^4.0.3"
+ minimatch: "npm:^9.0.4"
+ semver: "npm:^7.6.0"
+ ts-api-utils: "npm:^2.0.1"
+ peerDependencies:
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/8eeeae6e8de1cd83f2eddd52293e9c31a655e0974cc2d410f00ba2b6fd6bb9aec1c346192d5784d64d0d1b15a55e56e35550788c04dda87e0f1a99b21a3eb709
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/utils@npm:8.24.1":
+ version: 8.24.1
+ resolution: "@typescript-eslint/utils@npm:8.24.1"
+ dependencies:
+ "@eslint-community/eslint-utils": "npm:^4.4.0"
+ "@typescript-eslint/scope-manager": "npm:8.24.1"
+ "@typescript-eslint/types": "npm:8.24.1"
+ "@typescript-eslint/typescript-estree": "npm:8.24.1"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/b3300d5c7e18ec524a46bf683052539f24df0d8c709e39e3bde9dfc6c65180610c46b875f1f4eaad5e311193a56acdfd7111a73f1e8aec4108e9cd19561bf8b8
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/visitor-keys@npm:8.24.1":
+ version: 8.24.1
+ resolution: "@typescript-eslint/visitor-keys@npm:8.24.1"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.24.1"
+ eslint-visitor-keys: "npm:^4.2.0"
+ checksum: 10c0/ba09412fb4b1605aa73c890909c9a8dba2aa72e00ccd7d69baad17c564eedd77f489a06b1686985c7f0c49724787b82d76dcf4c146c4de44ef2c8776a9b6ad2b
+ languageName: node
+ linkType: hard
+
+"abbrev@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "abbrev@npm:3.0.0"
+ checksum: 10c0/049704186396f571650eb7b22ed3627b77a5aedf98bb83caf2eac81ca2a3e25e795394b0464cfb2d6076df3db6a5312139eac5b6a126ca296ac53c5008069c28
+ languageName: node
+ linkType: hard
+
+"acorn-jsx@npm:^5.3.2":
+ version: 5.3.2
+ resolution: "acorn-jsx@npm:5.3.2"
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1
+ languageName: node
+ linkType: hard
+
+"acorn-walk@npm:^8.1.1":
+ version: 8.3.4
+ resolution: "acorn-walk@npm:8.3.4"
+ dependencies:
+ acorn: "npm:^8.11.0"
+ checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62
+ languageName: node
+ linkType: hard
+
+"acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.4.1":
+ version: 8.14.0
+ resolution: "acorn@npm:8.14.0"
+ bin:
+ acorn: bin/acorn
+ checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7
+ languageName: node
+ linkType: hard
+
+"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2":
+ version: 7.1.3
+ resolution: "agent-base@npm:7.1.3"
+ checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11
+ languageName: node
+ linkType: hard
+
+"ajv@npm:^6.12.4":
+ version: 6.12.6
+ resolution: "ajv@npm:6.12.6"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.1"
+ fast-json-stable-stringify: "npm:^2.0.0"
+ json-schema-traverse: "npm:^0.4.1"
+ uri-js: "npm:^4.2.2"
+ checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71
+ languageName: node
+ linkType: hard
+
+"ajv@npm:^8.0.1":
+ version: 8.17.1
+ resolution: "ajv@npm:8.17.1"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.3"
+ fast-uri: "npm:^3.0.1"
+ json-schema-traverse: "npm:^1.0.0"
+ require-from-string: "npm:^2.0.2"
+ checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35
+ languageName: node
+ linkType: hard
+
+"ajv@npm:~8.12.0":
+ version: 8.12.0
+ resolution: "ajv@npm:8.12.0"
+ dependencies:
+ fast-deep-equal: "npm:^3.1.1"
+ json-schema-traverse: "npm:^1.0.0"
+ require-from-string: "npm:^2.0.2"
+ uri-js: "npm:^4.2.2"
+ checksum: 10c0/ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e
+ languageName: node
+ linkType: hard
+
+"ansi-escapes@npm:^4.2.1":
+ version: 4.3.2
+ resolution: "ansi-escapes@npm:4.3.2"
+ dependencies:
+ type-fest: "npm:^0.21.3"
+ checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50
+ languageName: node
+ linkType: hard
+
+"ansi-regex@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "ansi-regex@npm:5.0.1"
+ checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737
+ languageName: node
+ linkType: hard
+
+"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
+ version: 4.3.0
+ resolution: "ansi-styles@npm:4.3.0"
+ dependencies:
+ color-convert: "npm:^2.0.1"
+ checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041
+ languageName: node
+ linkType: hard
+
+"ansi-styles@npm:^5.0.0":
+ version: 5.2.0
+ resolution: "ansi-styles@npm:5.2.0"
+ checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df
+ languageName: node
+ linkType: hard
+
+"anymatch@npm:^3.0.3":
+ version: 3.1.3
+ resolution: "anymatch@npm:3.1.3"
+ dependencies:
+ normalize-path: "npm:^3.0.0"
+ picomatch: "npm:^2.0.4"
+ checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac
+ languageName: node
+ linkType: hard
+
+"arg@npm:^4.1.0":
+ version: 4.1.3
+ resolution: "arg@npm:4.1.3"
+ checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a
+ languageName: node
+ linkType: hard
+
+"argparse@npm:^1.0.7":
+ version: 1.0.10
+ resolution: "argparse@npm:1.0.10"
+ dependencies:
+ sprintf-js: "npm:~1.0.2"
+ checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de
+ languageName: node
+ linkType: hard
+
+"argparse@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "argparse@npm:2.0.1"
+ checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e
+ languageName: node
+ linkType: hard
+
+"astral-regex@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "astral-regex@npm:2.0.0"
+ checksum: 10c0/f63d439cc383db1b9c5c6080d1e240bd14dae745f15d11ec5da863e182bbeca70df6c8191cffef5deba0b566ef98834610a68be79ac6379c95eeb26e1b310e25
+ languageName: node
+ linkType: hard
+
+"async@npm:^3.2.3":
+ version: 3.2.6
+ resolution: "async@npm:3.2.6"
+ checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70
+ languageName: node
+ linkType: hard
+
+"aws-cdk-lib@npm:2.176.0":
+ version: 2.176.0
+ resolution: "aws-cdk-lib@npm:2.176.0"
+ dependencies:
+ "@aws-cdk/asset-awscli-v1": "npm:^2.2.208"
+ "@aws-cdk/asset-kubectl-v20": "npm:^2.1.3"
+ "@aws-cdk/asset-node-proxy-agent-v6": "npm:^2.1.0"
+ "@aws-cdk/cloud-assembly-schema": "npm:^39.0.1"
+ "@balena/dockerignore": "npm:^1.0.2"
+ case: "npm:1.6.3"
+ fs-extra: "npm:^11.2.0"
+ ignore: "npm:^5.3.2"
+ jsonschema: "npm:^1.4.1"
+ mime-types: "npm:^2.1.35"
+ minimatch: "npm:^3.1.2"
+ punycode: "npm:^2.3.1"
+ semver: "npm:^7.6.3"
+ table: "npm:^6.8.2"
+ yaml: "npm:1.10.2"
+ peerDependencies:
+ constructs: ^10.0.0
+ checksum: 10c0/8b2506f6245572b508dbe4221f1fd64161bae46aea26686f3616b8c34cedbd1bc3c7b0a8f65722c625f945805dad52976f3564dbfa05afe4dcd39b1cfdc3fe1b
+ languageName: node
+ linkType: hard
+
+"aws-cdk@npm:2.176.0":
+ version: 2.176.0
+ resolution: "aws-cdk@npm:2.176.0"
+ dependencies:
+ fsevents: "npm:2.3.2"
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ bin:
+ cdk: bin/cdk
+ checksum: 10c0/861dddf7dcc67806c9dae85e191af94080c6e76aaf47bf29c9b3971c6277738c5dbc64609c220b32ef4885d788360614aa1241617803d730dc1f77db2c5b7c23
+ languageName: node
+ linkType: hard
+
+"aws4embeddedlinux-cdk-lib@workspace:.":
+ version: 0.0.0-use.local
+ resolution: "aws4embeddedlinux-cdk-lib@workspace:."
+ dependencies:
+ "@eslint/compat": "npm:^1.2.4"
+ "@eslint/eslintrc": "npm:^3.2.0"
+ "@eslint/js": "npm:^9.16.0"
+ "@types/jest": "npm:^29.5.14"
+ "@types/node": "npm:20.14.8"
+ "@typescript-eslint/eslint-plugin": "npm:^8.18.0"
+ "@typescript-eslint/parser": "npm:^8.18.0"
+ aws-cdk: "npm:2.176.0"
+ aws-cdk-lib: "npm:2.176.0"
+ cdk-nag: "npm:^2.35.0"
+ constructs: "npm:^10.4.2"
+ eslint: "npm:^9.16.0"
+ eslint-config-prettier: "npm:^9.1.0"
+ eslint-plugin-prettier: "npm:^5.2.1"
+ eslint-plugin-tsdoc: "npm:^0.4.0"
+ globals: "npm:^15.13.0"
+ jest: "npm:^29.7.0"
+ prettier: "npm:^3.4.2"
+ ts-jest: "npm:^29.2.5"
+ ts-node: "npm:^10.9.2"
+ typedoc: "npm:^0.27.4"
+ typescript: "npm:~5.7.2"
+ typescript-eslint: "npm:^8.18.0"
+ languageName: unknown
+ linkType: soft
+
+"babel-jest@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "babel-jest@npm:29.7.0"
+ dependencies:
+ "@jest/transform": "npm:^29.7.0"
+ "@types/babel__core": "npm:^7.1.14"
+ babel-plugin-istanbul: "npm:^6.1.1"
+ babel-preset-jest: "npm:^29.6.3"
+ chalk: "npm:^4.0.0"
+ graceful-fs: "npm:^4.2.9"
+ slash: "npm:^3.0.0"
+ peerDependencies:
+ "@babel/core": ^7.8.0
+ checksum: 10c0/2eda9c1391e51936ca573dd1aedfee07b14c59b33dbe16ef347873ddd777bcf6e2fc739681e9e9661ab54ef84a3109a03725be2ac32cd2124c07ea4401cbe8c1
+ languageName: node
+ linkType: hard
+
+"babel-plugin-istanbul@npm:^6.1.1":
+ version: 6.1.1
+ resolution: "babel-plugin-istanbul@npm:6.1.1"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.0.0"
+ "@istanbuljs/load-nyc-config": "npm:^1.0.0"
+ "@istanbuljs/schema": "npm:^0.1.2"
+ istanbul-lib-instrument: "npm:^5.0.4"
+ test-exclude: "npm:^6.0.0"
+ checksum: 10c0/1075657feb705e00fd9463b329921856d3775d9867c5054b449317d39153f8fbcebd3e02ebf00432824e647faff3683a9ca0a941325ef1afe9b3c4dd51b24beb
+ languageName: node
+ linkType: hard
+
+"babel-plugin-jest-hoist@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "babel-plugin-jest-hoist@npm:29.6.3"
+ dependencies:
+ "@babel/template": "npm:^7.3.3"
+ "@babel/types": "npm:^7.3.3"
+ "@types/babel__core": "npm:^7.1.14"
+ "@types/babel__traverse": "npm:^7.0.6"
+ checksum: 10c0/7e6451caaf7dce33d010b8aafb970e62f1b0c0b57f4978c37b0d457bbcf0874d75a395a102daf0bae0bd14eafb9f6e9a165ee5e899c0a4f1f3bb2e07b304ed2e
+ languageName: node
+ linkType: hard
+
+"babel-preset-current-node-syntax@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "babel-preset-current-node-syntax@npm:1.1.0"
+ dependencies:
+ "@babel/plugin-syntax-async-generators": "npm:^7.8.4"
+ "@babel/plugin-syntax-bigint": "npm:^7.8.3"
+ "@babel/plugin-syntax-class-properties": "npm:^7.12.13"
+ "@babel/plugin-syntax-class-static-block": "npm:^7.14.5"
+ "@babel/plugin-syntax-import-attributes": "npm:^7.24.7"
+ "@babel/plugin-syntax-import-meta": "npm:^7.10.4"
+ "@babel/plugin-syntax-json-strings": "npm:^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3"
+ "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3"
+ "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5"
+ "@babel/plugin-syntax-top-level-await": "npm:^7.14.5"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/0b838d4412e3322cb4436f246e24e9c00bebcedfd8f00a2f51489db683bd35406bbd55a700759c28d26959c6e03f84dd6a1426f576f440267c1d7a73c5717281
+ languageName: node
+ linkType: hard
+
+"babel-preset-jest@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "babel-preset-jest@npm:29.6.3"
+ dependencies:
+ babel-plugin-jest-hoist: "npm:^29.6.3"
+ babel-preset-current-node-syntax: "npm:^1.0.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/ec5fd0276b5630b05f0c14bb97cc3815c6b31600c683ebb51372e54dcb776cff790bdeeabd5b8d01ede375a040337ccbf6a3ccd68d3a34219125945e167ad943
+ languageName: node
+ linkType: hard
+
+"balanced-match@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "balanced-match@npm:1.0.2"
+ checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee
+ languageName: node
+ linkType: hard
+
+"brace-expansion@npm:^1.1.7":
+ version: 1.1.11
+ resolution: "brace-expansion@npm:1.1.11"
+ dependencies:
+ balanced-match: "npm:^1.0.0"
+ concat-map: "npm:0.0.1"
+ checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668
+ languageName: node
+ linkType: hard
+
+"brace-expansion@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "brace-expansion@npm:2.0.1"
+ dependencies:
+ balanced-match: "npm:^1.0.0"
+ checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f
+ languageName: node
+ linkType: hard
+
+"braces@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "braces@npm:3.0.3"
+ dependencies:
+ fill-range: "npm:^7.1.1"
+ checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04
+ languageName: node
+ linkType: hard
+
+"browserslist@npm:^4.24.0":
+ version: 4.24.4
+ resolution: "browserslist@npm:4.24.4"
+ dependencies:
+ caniuse-lite: "npm:^1.0.30001688"
+ electron-to-chromium: "npm:^1.5.73"
+ node-releases: "npm:^2.0.19"
+ update-browserslist-db: "npm:^1.1.1"
+ bin:
+ browserslist: cli.js
+ checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9
+ languageName: node
+ linkType: hard
+
+"bs-logger@npm:^0.2.6":
+ version: 0.2.6
+ resolution: "bs-logger@npm:0.2.6"
+ dependencies:
+ fast-json-stable-stringify: "npm:2.x"
+ checksum: 10c0/80e89aaaed4b68e3374ce936f2eb097456a0dddbf11f75238dbd53140b1e39259f0d248a5089ed456f1158984f22191c3658d54a713982f676709fbe1a6fa5a0
+ languageName: node
+ linkType: hard
+
+"bser@npm:2.1.1":
+ version: 2.1.1
+ resolution: "bser@npm:2.1.1"
+ dependencies:
+ node-int64: "npm:^0.4.0"
+ checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227
+ languageName: node
+ linkType: hard
+
+"buffer-from@npm:^1.0.0":
+ version: 1.1.2
+ resolution: "buffer-from@npm:1.1.2"
+ checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34
+ languageName: node
+ linkType: hard
+
+"cacache@npm:^19.0.1":
+ version: 19.0.1
+ resolution: "cacache@npm:19.0.1"
+ dependencies:
+ "@npmcli/fs": "npm:^4.0.0"
+ fs-minipass: "npm:^3.0.0"
+ glob: "npm:^10.2.2"
+ lru-cache: "npm:^10.0.1"
+ minipass: "npm:^7.0.3"
+ minipass-collect: "npm:^2.0.1"
+ minipass-flush: "npm:^1.0.5"
+ minipass-pipeline: "npm:^1.2.4"
+ p-map: "npm:^7.0.2"
+ ssri: "npm:^12.0.0"
+ tar: "npm:^7.4.3"
+ unique-filename: "npm:^4.0.0"
+ checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c
+ languageName: node
+ linkType: hard
+
+"callsites@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "callsites@npm:3.1.0"
+ checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301
+ languageName: node
+ linkType: hard
+
+"camelcase@npm:^5.3.1":
+ version: 5.3.1
+ resolution: "camelcase@npm:5.3.1"
+ checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23
+ languageName: node
+ linkType: hard
+
+"camelcase@npm:^6.2.0":
+ version: 6.3.0
+ resolution: "camelcase@npm:6.3.0"
+ checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710
+ languageName: node
+ linkType: hard
+
+"caniuse-lite@npm:^1.0.30001688":
+ version: 1.0.30001700
+ resolution: "caniuse-lite@npm:1.0.30001700"
+ checksum: 10c0/3d391bcdd193208166d3ad759de240b9c18ac3759dbd57195770f0fcd2eedcd47d5e853609aba1eee5a2def44b0a14eee457796bdb3451a27de0c8b27355017c
+ languageName: node
+ linkType: hard
+
+"case@npm:1.6.3":
+ version: 1.6.3
+ resolution: "case@npm:1.6.3"
+ checksum: 10c0/43fcbb1dff1c4add94dd2bc98bd923d6616f10bff6959adf686d192c3db7d7ced35410761e1ac94cc4a1f5c41c86406ad79d390805539e421e8a77e553f67223
+ languageName: node
+ linkType: hard
+
+"cdk-nag@npm:^2.35.0":
+ version: 2.35.24
+ resolution: "cdk-nag@npm:2.35.24"
+ peerDependencies:
+ aws-cdk-lib: ^2.156.0
+ constructs: ^10.0.5
+ checksum: 10c0/12783afc8f2cef18e5fb70a988864a548250383e0a4e4430853458fc49f3241697f035b9c9516fe68f07d8f76dcbb6b85bdf6c8522639392aac78db05577e68f
+ languageName: node
+ linkType: hard
+
+"chalk@npm:^4.0.0, chalk@npm:^4.0.2":
+ version: 4.1.2
+ resolution: "chalk@npm:4.1.2"
+ dependencies:
+ ansi-styles: "npm:^4.1.0"
+ supports-color: "npm:^7.1.0"
+ checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880
+ languageName: node
+ linkType: hard
+
+"char-regex@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "char-regex@npm:1.0.2"
+ checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e
+ languageName: node
+ linkType: hard
+
+"chownr@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "chownr@npm:3.0.0"
+ checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10
+ languageName: node
+ linkType: hard
+
+"ci-info@npm:^3.2.0":
+ version: 3.9.0
+ resolution: "ci-info@npm:3.9.0"
+ checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a
+ languageName: node
+ linkType: hard
+
+"cjs-module-lexer@npm:^1.0.0":
+ version: 1.4.3
+ resolution: "cjs-module-lexer@npm:1.4.3"
+ checksum: 10c0/076b3af85adc4d65dbdab1b5b240fe5b45d44fcf0ef9d429044dd94d19be5589376805c44fb2d4b3e684e5fe6a9b7cf3e426476a6507c45283c5fc6ff95240be
+ languageName: node
+ linkType: hard
+
+"cliui@npm:^8.0.1":
+ version: 8.0.1
+ resolution: "cliui@npm:8.0.1"
+ dependencies:
+ string-width: "npm:^4.2.0"
+ strip-ansi: "npm:^6.0.1"
+ wrap-ansi: "npm:^7.0.0"
+ checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5
+ languageName: node
+ linkType: hard
+
+"co@npm:^4.6.0":
+ version: 4.6.0
+ resolution: "co@npm:4.6.0"
+ checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28
+ languageName: node
+ linkType: hard
+
+"collect-v8-coverage@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "collect-v8-coverage@npm:1.0.2"
+ checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1
+ languageName: node
+ linkType: hard
+
+"color-convert@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "color-convert@npm:2.0.1"
+ dependencies:
+ color-name: "npm:~1.1.4"
+ checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7
+ languageName: node
+ linkType: hard
+
+"color-name@npm:~1.1.4":
+ version: 1.1.4
+ resolution: "color-name@npm:1.1.4"
+ checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95
+ languageName: node
+ linkType: hard
+
+"concat-map@npm:0.0.1":
+ version: 0.0.1
+ resolution: "concat-map@npm:0.0.1"
+ checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f
+ languageName: node
+ linkType: hard
+
+"constructs@npm:^10.4.2":
+ version: 10.4.2
+ resolution: "constructs@npm:10.4.2"
+ checksum: 10c0/dcd5edd631c7313964f89fffb7365e1eebaede16cbc9ae69eab5337710353913684b860ccc4b2a3dfaf147656f48f0ae7853ca94cb51833e152b46047ac7a4ff
+ languageName: node
+ linkType: hard
+
+"convert-source-map@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "convert-source-map@npm:2.0.0"
+ checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b
+ languageName: node
+ linkType: hard
+
+"create-jest@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "create-jest@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ chalk: "npm:^4.0.0"
+ exit: "npm:^0.1.2"
+ graceful-fs: "npm:^4.2.9"
+ jest-config: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ prompts: "npm:^2.0.1"
+ bin:
+ create-jest: bin/create-jest.js
+ checksum: 10c0/e7e54c280692470d3398f62a6238fd396327e01c6a0757002833f06d00afc62dd7bfe04ff2b9cd145264460e6b4d1eb8386f2925b7e567f97939843b7b0e812f
+ languageName: node
+ linkType: hard
+
+"create-require@npm:^1.1.0":
+ version: 1.1.1
+ resolution: "create-require@npm:1.1.1"
+ checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91
+ languageName: node
+ linkType: hard
+
+"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6":
+ version: 7.0.6
+ resolution: "cross-spawn@npm:7.0.6"
+ dependencies:
+ path-key: "npm:^3.1.0"
+ shebang-command: "npm:^2.0.0"
+ which: "npm:^2.0.1"
+ checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1
+ languageName: node
+ linkType: hard
+
+"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4":
+ version: 4.4.0
+ resolution: "debug@npm:4.4.0"
+ dependencies:
+ ms: "npm:^2.1.3"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de
+ languageName: node
+ linkType: hard
+
+"dedent@npm:^1.0.0":
+ version: 1.5.3
+ resolution: "dedent@npm:1.5.3"
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+ checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832
+ languageName: node
+ linkType: hard
+
+"deep-is@npm:^0.1.3":
+ version: 0.1.4
+ resolution: "deep-is@npm:0.1.4"
+ checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c
+ languageName: node
+ linkType: hard
+
+"deepmerge@npm:^4.2.2":
+ version: 4.3.1
+ resolution: "deepmerge@npm:4.3.1"
+ checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044
+ languageName: node
+ linkType: hard
+
+"detect-newline@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "detect-newline@npm:3.1.0"
+ checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d
+ languageName: node
+ linkType: hard
+
+"diff-sequences@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "diff-sequences@npm:29.6.3"
+ checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2
+ languageName: node
+ linkType: hard
+
+"diff@npm:^4.0.1":
+ version: 4.0.2
+ resolution: "diff@npm:4.0.2"
+ checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1
+ languageName: node
+ linkType: hard
+
+"ejs@npm:^3.1.10":
+ version: 3.1.10
+ resolution: "ejs@npm:3.1.10"
+ dependencies:
+ jake: "npm:^10.8.5"
+ bin:
+ ejs: bin/cli.js
+ checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1
+ languageName: node
+ linkType: hard
+
+"electron-to-chromium@npm:^1.5.73":
+ version: 1.5.102
+ resolution: "electron-to-chromium@npm:1.5.102"
+ checksum: 10c0/db07dab3ee3b7fbc39ad26203925669ade86b12a62d09fa14ae48a354a0f34d162ac9a2ca9d6f70ceb1b16821b01b155e56467702bcc915da1e1dd147dd034b4
+ languageName: node
+ linkType: hard
+
+"emittery@npm:^0.13.1":
+ version: 0.13.1
+ resolution: "emittery@npm:0.13.1"
+ checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35
+ languageName: node
+ linkType: hard
+
+"emoji-regex@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "emoji-regex@npm:8.0.0"
+ checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010
+ languageName: node
+ linkType: hard
+
+"encoding@npm:^0.1.13":
+ version: 0.1.13
+ resolution: "encoding@npm:0.1.13"
+ dependencies:
+ iconv-lite: "npm:^0.6.2"
+ checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039
+ languageName: node
+ linkType: hard
+
+"entities@npm:^4.4.0":
+ version: 4.5.0
+ resolution: "entities@npm:4.5.0"
+ checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250
+ languageName: node
+ linkType: hard
+
+"env-paths@npm:^2.2.0":
+ version: 2.2.1
+ resolution: "env-paths@npm:2.2.1"
+ checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4
+ languageName: node
+ linkType: hard
+
+"err-code@npm:^2.0.2":
+ version: 2.0.3
+ resolution: "err-code@npm:2.0.3"
+ checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66
+ languageName: node
+ linkType: hard
+
+"error-ex@npm:^1.3.1":
+ version: 1.3.2
+ resolution: "error-ex@npm:1.3.2"
+ dependencies:
+ is-arrayish: "npm:^0.2.1"
+ checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce
+ languageName: node
+ linkType: hard
+
+"escalade@npm:^3.1.1, escalade@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "escalade@npm:3.2.0"
+ checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65
+ languageName: node
+ linkType: hard
+
+"escape-string-regexp@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "escape-string-regexp@npm:2.0.0"
+ checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507
+ languageName: node
+ linkType: hard
+
+"escape-string-regexp@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "escape-string-regexp@npm:4.0.0"
+ checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9
+ languageName: node
+ linkType: hard
+
+"eslint-config-prettier@npm:^9.1.0":
+ version: 9.1.0
+ resolution: "eslint-config-prettier@npm:9.1.0"
+ peerDependencies:
+ eslint: ">=7.0.0"
+ bin:
+ eslint-config-prettier: bin/cli.js
+ checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-prettier@npm:^5.2.1":
+ version: 5.2.3
+ resolution: "eslint-plugin-prettier@npm:5.2.3"
+ dependencies:
+ prettier-linter-helpers: "npm:^1.0.0"
+ synckit: "npm:^0.9.1"
+ peerDependencies:
+ "@types/eslint": ">=8.0.0"
+ eslint: ">=8.0.0"
+ eslint-config-prettier: "*"
+ prettier: ">=3.0.0"
+ peerDependenciesMeta:
+ "@types/eslint":
+ optional: true
+ eslint-config-prettier:
+ optional: true
+ checksum: 10c0/60d9c03491ec6080ac1d71d0bee1361539ff6beb9b91ac98cfa7176c9ed52b7dbe7119ebee5b441b479d447d17d802a4a492ee06095ef2f22c460e3dd6459302
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-tsdoc@npm:^0.4.0":
+ version: 0.4.0
+ resolution: "eslint-plugin-tsdoc@npm:0.4.0"
+ dependencies:
+ "@microsoft/tsdoc": "npm:0.15.1"
+ "@microsoft/tsdoc-config": "npm:0.17.1"
+ checksum: 10c0/c65b67b789597683456cd346414451618b9a2ed40f4d6b02223426914ba83c37083c8d330d15808ff5e448c755bdb254ff0ffb1971688304168ed8d22dbcc7d3
+ languageName: node
+ linkType: hard
+
+"eslint-scope@npm:^8.2.0":
+ version: 8.2.0
+ resolution: "eslint-scope@npm:8.2.0"
+ dependencies:
+ esrecurse: "npm:^4.3.0"
+ estraverse: "npm:^5.2.0"
+ checksum: 10c0/8d2d58e2136d548ac7e0099b1a90d9fab56f990d86eb518de1247a7066d38c908be2f3df477a79cf60d70b30ba18735d6c6e70e9914dca2ee515a729975d70d6
+ languageName: node
+ linkType: hard
+
+"eslint-visitor-keys@npm:^3.4.3":
+ version: 3.4.3
+ resolution: "eslint-visitor-keys@npm:3.4.3"
+ checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820
+ languageName: node
+ linkType: hard
+
+"eslint-visitor-keys@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "eslint-visitor-keys@npm:4.2.0"
+ checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269
+ languageName: node
+ linkType: hard
+
+"eslint@npm:^9.16.0":
+ version: 9.20.1
+ resolution: "eslint@npm:9.20.1"
+ dependencies:
+ "@eslint-community/eslint-utils": "npm:^4.2.0"
+ "@eslint-community/regexpp": "npm:^4.12.1"
+ "@eslint/config-array": "npm:^0.19.0"
+ "@eslint/core": "npm:^0.11.0"
+ "@eslint/eslintrc": "npm:^3.2.0"
+ "@eslint/js": "npm:9.20.0"
+ "@eslint/plugin-kit": "npm:^0.2.5"
+ "@humanfs/node": "npm:^0.16.6"
+ "@humanwhocodes/module-importer": "npm:^1.0.1"
+ "@humanwhocodes/retry": "npm:^0.4.1"
+ "@types/estree": "npm:^1.0.6"
+ "@types/json-schema": "npm:^7.0.15"
+ ajv: "npm:^6.12.4"
+ chalk: "npm:^4.0.0"
+ cross-spawn: "npm:^7.0.6"
+ debug: "npm:^4.3.2"
+ escape-string-regexp: "npm:^4.0.0"
+ eslint-scope: "npm:^8.2.0"
+ eslint-visitor-keys: "npm:^4.2.0"
+ espree: "npm:^10.3.0"
+ esquery: "npm:^1.5.0"
+ esutils: "npm:^2.0.2"
+ fast-deep-equal: "npm:^3.1.3"
+ file-entry-cache: "npm:^8.0.0"
+ find-up: "npm:^5.0.0"
+ glob-parent: "npm:^6.0.2"
+ ignore: "npm:^5.2.0"
+ imurmurhash: "npm:^0.1.4"
+ is-glob: "npm:^4.0.0"
+ json-stable-stringify-without-jsonify: "npm:^1.0.1"
+ lodash.merge: "npm:^4.6.2"
+ minimatch: "npm:^3.1.2"
+ natural-compare: "npm:^1.4.0"
+ optionator: "npm:^0.9.3"
+ peerDependencies:
+ jiti: "*"
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+ bin:
+ eslint: bin/eslint.js
+ checksum: 10c0/056789dd5a00897730376f8c0a191e22840e97b7276916068ec096341cb2ec3a918c8bd474bf94ccd7b457ad9fbc16e5c521a993c7cc6ebcf241933e2fd378b0
+ languageName: node
+ linkType: hard
+
+"espree@npm:^10.0.1, espree@npm:^10.3.0":
+ version: 10.3.0
+ resolution: "espree@npm:10.3.0"
+ dependencies:
+ acorn: "npm:^8.14.0"
+ acorn-jsx: "npm:^5.3.2"
+ eslint-visitor-keys: "npm:^4.2.0"
+ checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462
+ languageName: node
+ linkType: hard
+
+"esprima@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "esprima@npm:4.0.1"
+ bin:
+ esparse: ./bin/esparse.js
+ esvalidate: ./bin/esvalidate.js
+ checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3
+ languageName: node
+ linkType: hard
+
+"esquery@npm:^1.5.0":
+ version: 1.6.0
+ resolution: "esquery@npm:1.6.0"
+ dependencies:
+ estraverse: "npm:^5.1.0"
+ checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2
+ languageName: node
+ linkType: hard
+
+"esrecurse@npm:^4.3.0":
+ version: 4.3.0
+ resolution: "esrecurse@npm:4.3.0"
+ dependencies:
+ estraverse: "npm:^5.2.0"
+ checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5
+ languageName: node
+ linkType: hard
+
+"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0":
+ version: 5.3.0
+ resolution: "estraverse@npm:5.3.0"
+ checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107
+ languageName: node
+ linkType: hard
+
+"esutils@npm:^2.0.2":
+ version: 2.0.3
+ resolution: "esutils@npm:2.0.3"
+ checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7
+ languageName: node
+ linkType: hard
+
+"execa@npm:^5.0.0":
+ version: 5.1.1
+ resolution: "execa@npm:5.1.1"
+ dependencies:
+ cross-spawn: "npm:^7.0.3"
+ get-stream: "npm:^6.0.0"
+ human-signals: "npm:^2.1.0"
+ is-stream: "npm:^2.0.0"
+ merge-stream: "npm:^2.0.0"
+ npm-run-path: "npm:^4.0.1"
+ onetime: "npm:^5.1.2"
+ signal-exit: "npm:^3.0.3"
+ strip-final-newline: "npm:^2.0.0"
+ checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f
+ languageName: node
+ linkType: hard
+
+"exit@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "exit@npm:0.1.2"
+ checksum: 10c0/71d2ad9b36bc25bb8b104b17e830b40a08989be7f7d100b13269aaae7c3784c3e6e1e88a797e9e87523993a25ba27c8958959a554535370672cfb4d824af8989
+ languageName: node
+ linkType: hard
+
+"expect@npm:^29.0.0, expect@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "expect@npm:29.7.0"
+ dependencies:
+ "@jest/expect-utils": "npm:^29.7.0"
+ jest-get-type: "npm:^29.6.3"
+ jest-matcher-utils: "npm:^29.7.0"
+ jest-message-util: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ checksum: 10c0/2eddeace66e68b8d8ee5f7be57f3014b19770caaf6815c7a08d131821da527fb8c8cb7b3dcd7c883d2d3d8d184206a4268984618032d1e4b16dc8d6596475d41
+ languageName: node
+ linkType: hard
+
+"exponential-backoff@npm:^3.1.1":
+ version: 3.1.2
+ resolution: "exponential-backoff@npm:3.1.2"
+ checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844
+ languageName: node
+ linkType: hard
+
+"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
+ version: 3.1.3
+ resolution: "fast-deep-equal@npm:3.1.3"
+ checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0
+ languageName: node
+ linkType: hard
+
+"fast-diff@npm:^1.1.2":
+ version: 1.3.0
+ resolution: "fast-diff@npm:1.3.0"
+ checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29
+ languageName: node
+ linkType: hard
+
+"fast-glob@npm:^3.3.2":
+ version: 3.3.3
+ resolution: "fast-glob@npm:3.3.3"
+ dependencies:
+ "@nodelib/fs.stat": "npm:^2.0.2"
+ "@nodelib/fs.walk": "npm:^1.2.3"
+ glob-parent: "npm:^5.1.2"
+ merge2: "npm:^1.3.0"
+ micromatch: "npm:^4.0.8"
+ checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe
+ languageName: node
+ linkType: hard
+
+"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "fast-json-stable-stringify@npm:2.1.0"
+ checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b
+ languageName: node
+ linkType: hard
+
+"fast-levenshtein@npm:^2.0.6":
+ version: 2.0.6
+ resolution: "fast-levenshtein@npm:2.0.6"
+ checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4
+ languageName: node
+ linkType: hard
+
+"fast-uri@npm:^3.0.1":
+ version: 3.0.6
+ resolution: "fast-uri@npm:3.0.6"
+ checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29
+ languageName: node
+ linkType: hard
+
+"fastq@npm:^1.6.0":
+ version: 1.19.0
+ resolution: "fastq@npm:1.19.0"
+ dependencies:
+ reusify: "npm:^1.0.4"
+ checksum: 10c0/d6a001638f1574a696660fcbba5300d017760432372c801632c325ca7c16819604841c92fd3ccadcdacec0966ca336363a5ff57bc5f0be335d8ea7ac6087b98f
+ languageName: node
+ linkType: hard
+
+"fb-watchman@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "fb-watchman@npm:2.0.2"
+ dependencies:
+ bser: "npm:2.1.1"
+ checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581
+ languageName: node
+ linkType: hard
+
+"file-entry-cache@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "file-entry-cache@npm:8.0.0"
+ dependencies:
+ flat-cache: "npm:^4.0.0"
+ checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638
+ languageName: node
+ linkType: hard
+
+"filelist@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "filelist@npm:1.0.4"
+ dependencies:
+ minimatch: "npm:^5.0.1"
+ checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41
+ languageName: node
+ linkType: hard
+
+"fill-range@npm:^7.1.1":
+ version: 7.1.1
+ resolution: "fill-range@npm:7.1.1"
+ dependencies:
+ to-regex-range: "npm:^5.0.1"
+ checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018
+ languageName: node
+ linkType: hard
+
+"find-up@npm:^4.0.0, find-up@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "find-up@npm:4.1.0"
+ dependencies:
+ locate-path: "npm:^5.0.0"
+ path-exists: "npm:^4.0.0"
+ checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1
+ languageName: node
+ linkType: hard
+
+"find-up@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "find-up@npm:5.0.0"
+ dependencies:
+ locate-path: "npm:^6.0.0"
+ path-exists: "npm:^4.0.0"
+ checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a
+ languageName: node
+ linkType: hard
+
+"flat-cache@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "flat-cache@npm:4.0.1"
+ dependencies:
+ flatted: "npm:^3.2.9"
+ keyv: "npm:^4.5.4"
+ checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc
+ languageName: node
+ linkType: hard
+
+"flatted@npm:^3.2.9":
+ version: 3.3.3
+ resolution: "flatted@npm:3.3.3"
+ checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538
+ languageName: node
+ linkType: hard
+
+"fs-extra@npm:^11.2.0":
+ version: 11.3.0
+ resolution: "fs-extra@npm:11.3.0"
+ dependencies:
+ graceful-fs: "npm:^4.2.0"
+ jsonfile: "npm:^6.0.1"
+ universalify: "npm:^2.0.0"
+ checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a
+ languageName: node
+ linkType: hard
+
+"fs-minipass@npm:^3.0.0":
+ version: 3.0.3
+ resolution: "fs-minipass@npm:3.0.3"
+ dependencies:
+ minipass: "npm:^7.0.3"
+ checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94
+ languageName: node
+ linkType: hard
+
+"fs.realpath@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "fs.realpath@npm:1.0.0"
+ checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948
+ languageName: node
+ linkType: hard
+
+"fsevents@npm:2.3.2":
+ version: 2.3.2
+ resolution: "fsevents@npm:2.3.2"
+ dependencies:
+ node-gyp: "npm:latest"
+ checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
+"fsevents@npm:^2.3.2":
+ version: 2.3.3
+ resolution: "fsevents@npm:2.3.3"
+ dependencies:
+ node-gyp: "npm:latest"
+ checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
+"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin":
+ version: 2.3.2
+ resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"
+ dependencies:
+ node-gyp: "npm:latest"
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
+"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin":
+ version: 2.3.3
+ resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"
+ dependencies:
+ node-gyp: "npm:latest"
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
+"function-bind@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "function-bind@npm:1.1.2"
+ checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5
+ languageName: node
+ linkType: hard
+
+"gensync@npm:^1.0.0-beta.2":
+ version: 1.0.0-beta.2
+ resolution: "gensync@npm:1.0.0-beta.2"
+ checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8
+ languageName: node
+ linkType: hard
+
+"get-caller-file@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "get-caller-file@npm:2.0.5"
+ checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde
+ languageName: node
+ linkType: hard
+
+"get-package-type@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "get-package-type@npm:0.1.0"
+ checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be
+ languageName: node
+ linkType: hard
+
+"get-stream@npm:^6.0.0":
+ version: 6.0.1
+ resolution: "get-stream@npm:6.0.1"
+ checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341
+ languageName: node
+ linkType: hard
+
+"glob-parent@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "glob-parent@npm:5.1.2"
+ dependencies:
+ is-glob: "npm:^4.0.1"
+ checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee
+ languageName: node
+ linkType: hard
+
+"glob-parent@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "glob-parent@npm:6.0.2"
+ dependencies:
+ is-glob: "npm:^4.0.3"
+ checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8
+ languageName: node
+ linkType: hard
+
+"glob@npm:^9.3.5":
+ version: 9.3.5
+ resolution: "glob@npm:9.3.5"
+ dependencies:
+ fs.realpath: "npm:^1.0.0"
+ minimatch: "npm:^8.0.2"
+ minipass: "npm:^4.2.4"
+ path-scurry: "npm:^1.6.1"
+ checksum: 10c0/2f6c2b9ee019ee21dc258ae97a88719614591e4c979cb4580b1b9df6f0f778a3cb38b4bdaf18dfa584637ea10f89a3c5f2533a5e449cf8741514ad18b0951f2e
+ languageName: node
+ linkType: hard
+
+"globals@npm:^11.1.0":
+ version: 11.12.0
+ resolution: "globals@npm:11.12.0"
+ checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1
+ languageName: node
+ linkType: hard
+
+"globals@npm:^14.0.0":
+ version: 14.0.0
+ resolution: "globals@npm:14.0.0"
+ checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d
+ languageName: node
+ linkType: hard
+
+"globals@npm:^15.13.0":
+ version: 15.15.0
+ resolution: "globals@npm:15.15.0"
+ checksum: 10c0/f9ae80996392ca71316495a39bec88ac43ae3525a438b5626cd9d5ce9d5500d0a98a266409605f8cd7241c7acf57c354a48111ea02a767ba4f374b806d6861fe
+ languageName: node
+ linkType: hard
+
+"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9":
+ version: 4.2.11
+ resolution: "graceful-fs@npm:4.2.11"
+ checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2
+ languageName: node
+ linkType: hard
+
+"graphemer@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "graphemer@npm:1.4.0"
+ checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31
+ languageName: node
+ linkType: hard
+
+"has-flag@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "has-flag@npm:4.0.0"
+ checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1
+ languageName: node
+ linkType: hard
+
+"hasown@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "hasown@npm:2.0.2"
+ dependencies:
+ function-bind: "npm:^1.1.2"
+ checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9
+ languageName: node
+ linkType: hard
+
+"html-escaper@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "html-escaper@npm:2.0.2"
+ checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0
+ languageName: node
+ linkType: hard
+
+"http-cache-semantics@npm:^4.1.1":
+ version: 4.1.1
+ resolution: "http-cache-semantics@npm:4.1.1"
+ checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc
+ languageName: node
+ linkType: hard
+
+"http-proxy-agent@npm:^7.0.0":
+ version: 7.0.2
+ resolution: "http-proxy-agent@npm:7.0.2"
+ dependencies:
+ agent-base: "npm:^7.1.0"
+ debug: "npm:^4.3.4"
+ checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921
+ languageName: node
+ linkType: hard
+
+"https-proxy-agent@npm:^7.0.1":
+ version: 7.0.6
+ resolution: "https-proxy-agent@npm:7.0.6"
+ dependencies:
+ agent-base: "npm:^7.1.2"
+ debug: "npm:4"
+ checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac
+ languageName: node
+ linkType: hard
+
+"human-signals@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "human-signals@npm:2.1.0"
+ checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a
+ languageName: node
+ linkType: hard
+
+"iconv-lite@npm:^0.6.2":
+ version: 0.6.3
+ resolution: "iconv-lite@npm:0.6.3"
+ dependencies:
+ safer-buffer: "npm:>= 2.1.2 < 3.0.0"
+ checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1
+ languageName: node
+ linkType: hard
+
+"ignore@npm:^5.2.0, ignore@npm:^5.3.1, ignore@npm:^5.3.2":
+ version: 5.3.2
+ resolution: "ignore@npm:5.3.2"
+ checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337
+ languageName: node
+ linkType: hard
+
+"import-fresh@npm:^3.2.1":
+ version: 3.3.1
+ resolution: "import-fresh@npm:3.3.1"
+ dependencies:
+ parent-module: "npm:^1.0.0"
+ resolve-from: "npm:^4.0.0"
+ checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec
+ languageName: node
+ linkType: hard
+
+"import-local@npm:^3.0.2":
+ version: 3.2.0
+ resolution: "import-local@npm:3.2.0"
+ dependencies:
+ pkg-dir: "npm:^4.2.0"
+ resolve-cwd: "npm:^3.0.0"
+ bin:
+ import-local-fixture: fixtures/cli.js
+ checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433
+ languageName: node
+ linkType: hard
+
+"imurmurhash@npm:^0.1.4":
+ version: 0.1.4
+ resolution: "imurmurhash@npm:0.1.4"
+ checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6
+ languageName: node
+ linkType: hard
+
+"ip-address@npm:^9.0.5":
+ version: 9.0.5
+ resolution: "ip-address@npm:9.0.5"
+ dependencies:
+ jsbn: "npm:1.1.0"
+ sprintf-js: "npm:^1.1.3"
+ checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc
+ languageName: node
+ linkType: hard
+
+"is-arrayish@npm:^0.2.1":
+ version: 0.2.1
+ resolution: "is-arrayish@npm:0.2.1"
+ checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729
+ languageName: node
+ linkType: hard
+
+"is-core-module@npm:^2.16.0":
+ version: 2.16.1
+ resolution: "is-core-module@npm:2.16.1"
+ dependencies:
+ hasown: "npm:^2.0.2"
+ checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd
+ languageName: node
+ linkType: hard
+
+"is-extglob@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "is-extglob@npm:2.1.1"
+ checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912
+ languageName: node
+ linkType: hard
+
+"is-fullwidth-code-point@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "is-fullwidth-code-point@npm:3.0.0"
+ checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc
+ languageName: node
+ linkType: hard
+
+"is-generator-fn@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "is-generator-fn@npm:2.1.0"
+ checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d
+ languageName: node
+ linkType: hard
+
+"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3":
+ version: 4.0.3
+ resolution: "is-glob@npm:4.0.3"
+ dependencies:
+ is-extglob: "npm:^2.1.1"
+ checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a
+ languageName: node
+ linkType: hard
+
+"is-number@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "is-number@npm:7.0.0"
+ checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811
+ languageName: node
+ linkType: hard
+
+"is-stream@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "is-stream@npm:2.0.1"
+ checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5
+ languageName: node
+ linkType: hard
+
+"isexe@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "isexe@npm:2.0.0"
+ checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d
+ languageName: node
+ linkType: hard
+
+"isexe@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "isexe@npm:3.1.1"
+ checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7
+ languageName: node
+ linkType: hard
+
+"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0":
+ version: 3.2.2
+ resolution: "istanbul-lib-coverage@npm:3.2.2"
+ checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b
+ languageName: node
+ linkType: hard
+
+"istanbul-lib-instrument@npm:^5.0.4":
+ version: 5.2.1
+ resolution: "istanbul-lib-instrument@npm:5.2.1"
+ dependencies:
+ "@babel/core": "npm:^7.12.3"
+ "@babel/parser": "npm:^7.14.7"
+ "@istanbuljs/schema": "npm:^0.1.2"
+ istanbul-lib-coverage: "npm:^3.2.0"
+ semver: "npm:^6.3.0"
+ checksum: 10c0/8a1bdf3e377dcc0d33ec32fe2b6ecacdb1e4358fd0eb923d4326bb11c67622c0ceb99600a680f3dad5d29c66fc1991306081e339b4d43d0b8a2ab2e1d910a6ee
+ languageName: node
+ linkType: hard
+
+"istanbul-lib-instrument@npm:^6.0.0":
+ version: 6.0.3
+ resolution: "istanbul-lib-instrument@npm:6.0.3"
+ dependencies:
+ "@babel/core": "npm:^7.23.9"
+ "@babel/parser": "npm:^7.23.9"
+ "@istanbuljs/schema": "npm:^0.1.3"
+ istanbul-lib-coverage: "npm:^3.2.0"
+ semver: "npm:^7.5.4"
+ checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128
+ languageName: node
+ linkType: hard
+
+"istanbul-lib-report@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "istanbul-lib-report@npm:3.0.1"
+ dependencies:
+ istanbul-lib-coverage: "npm:^3.0.0"
+ make-dir: "npm:^4.0.0"
+ supports-color: "npm:^7.1.0"
+ checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7
+ languageName: node
+ linkType: hard
+
+"istanbul-lib-source-maps@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "istanbul-lib-source-maps@npm:4.0.1"
+ dependencies:
+ debug: "npm:^4.1.1"
+ istanbul-lib-coverage: "npm:^3.0.0"
+ source-map: "npm:^0.6.1"
+ checksum: 10c0/19e4cc405016f2c906dff271a76715b3e881fa9faeb3f09a86cb99b8512b3a5ed19cadfe0b54c17ca0e54c1142c9c6de9330d65506e35873994e06634eebeb66
+ languageName: node
+ linkType: hard
+
+"istanbul-reports@npm:^3.1.3":
+ version: 3.1.7
+ resolution: "istanbul-reports@npm:3.1.7"
+ dependencies:
+ html-escaper: "npm:^2.0.0"
+ istanbul-lib-report: "npm:^3.0.0"
+ checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51
+ languageName: node
+ linkType: hard
+
+"jake@npm:^10.8.5":
+ version: 10.9.2
+ resolution: "jake@npm:10.9.2"
+ dependencies:
+ async: "npm:^3.2.3"
+ chalk: "npm:^4.0.2"
+ filelist: "npm:^1.0.4"
+ minimatch: "npm:^3.1.2"
+ bin:
+ jake: bin/cli.js
+ checksum: 10c0/c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31
+ languageName: node
+ linkType: hard
+
+"jest-changed-files@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-changed-files@npm:29.7.0"
+ dependencies:
+ execa: "npm:^5.0.0"
+ jest-util: "npm:^29.7.0"
+ p-limit: "npm:^3.1.0"
+ checksum: 10c0/e071384d9e2f6bb462231ac53f29bff86f0e12394c1b49ccafbad225ce2ab7da226279a8a94f421949920bef9be7ef574fd86aee22e8adfa149be73554ab828b
+ languageName: node
+ linkType: hard
+
+"jest-circus@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-circus@npm:29.7.0"
+ dependencies:
+ "@jest/environment": "npm:^29.7.0"
+ "@jest/expect": "npm:^29.7.0"
+ "@jest/test-result": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ chalk: "npm:^4.0.0"
+ co: "npm:^4.6.0"
+ dedent: "npm:^1.0.0"
+ is-generator-fn: "npm:^2.0.0"
+ jest-each: "npm:^29.7.0"
+ jest-matcher-utils: "npm:^29.7.0"
+ jest-message-util: "npm:^29.7.0"
+ jest-runtime: "npm:^29.7.0"
+ jest-snapshot: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ p-limit: "npm:^3.1.0"
+ pretty-format: "npm:^29.7.0"
+ pure-rand: "npm:^6.0.0"
+ slash: "npm:^3.0.0"
+ stack-utils: "npm:^2.0.3"
+ checksum: 10c0/8d15344cf7a9f14e926f0deed64ed190c7a4fa1ed1acfcd81e4cc094d3cc5bf7902ebb7b874edc98ada4185688f90c91e1747e0dfd7ac12463b097968ae74b5e
+ languageName: node
+ linkType: hard
+
+"jest-cli@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-cli@npm:29.7.0"
+ dependencies:
+ "@jest/core": "npm:^29.7.0"
+ "@jest/test-result": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ chalk: "npm:^4.0.0"
+ create-jest: "npm:^29.7.0"
+ exit: "npm:^0.1.2"
+ import-local: "npm:^3.0.2"
+ jest-config: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ jest-validate: "npm:^29.7.0"
+ yargs: "npm:^17.3.1"
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+ bin:
+ jest: bin/jest.js
+ checksum: 10c0/a658fd55050d4075d65c1066364595962ead7661711495cfa1dfeecf3d6d0a8ffec532f3dbd8afbb3e172dd5fd2fb2e813c5e10256e7cf2fea766314942fb43a
+ languageName: node
+ linkType: hard
+
+"jest-config@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-config@npm:29.7.0"
+ dependencies:
+ "@babel/core": "npm:^7.11.6"
+ "@jest/test-sequencer": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ babel-jest: "npm:^29.7.0"
+ chalk: "npm:^4.0.0"
+ ci-info: "npm:^3.2.0"
+ deepmerge: "npm:^4.2.2"
+ glob: "npm:^7.1.3"
+ graceful-fs: "npm:^4.2.9"
+ jest-circus: "npm:^29.7.0"
+ jest-environment-node: "npm:^29.7.0"
+ jest-get-type: "npm:^29.6.3"
+ jest-regex-util: "npm:^29.6.3"
+ jest-resolve: "npm:^29.7.0"
+ jest-runner: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ jest-validate: "npm:^29.7.0"
+ micromatch: "npm:^4.0.4"
+ parse-json: "npm:^5.2.0"
+ pretty-format: "npm:^29.7.0"
+ slash: "npm:^3.0.0"
+ strip-json-comments: "npm:^3.1.1"
+ peerDependencies:
+ "@types/node": "*"
+ ts-node: ">=9.0.0"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ ts-node:
+ optional: true
+ checksum: 10c0/bab23c2eda1fff06e0d104b00d6adfb1d1aabb7128441899c9bff2247bd26710b050a5364281ce8d52b46b499153bf7e3ee88b19831a8f3451f1477a0246a0f1
+ languageName: node
+ linkType: hard
+
+"jest-diff@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-diff@npm:29.7.0"
+ dependencies:
+ chalk: "npm:^4.0.0"
+ diff-sequences: "npm:^29.6.3"
+ jest-get-type: "npm:^29.6.3"
+ pretty-format: "npm:^29.7.0"
+ checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999
+ languageName: node
+ linkType: hard
+
+"jest-docblock@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-docblock@npm:29.7.0"
+ dependencies:
+ detect-newline: "npm:^3.0.0"
+ checksum: 10c0/d932a8272345cf6b6142bb70a2bb63e0856cc0093f082821577ea5bdf4643916a98744dfc992189d2b1417c38a11fa42466f6111526bc1fb81366f56410f3be9
+ languageName: node
+ linkType: hard
+
+"jest-each@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-each@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ chalk: "npm:^4.0.0"
+ jest-get-type: "npm:^29.6.3"
+ jest-util: "npm:^29.7.0"
+ pretty-format: "npm:^29.7.0"
+ checksum: 10c0/f7f9a90ebee80cc688e825feceb2613627826ac41ea76a366fa58e669c3b2403d364c7c0a74d862d469b103c843154f8456d3b1c02b487509a12afa8b59edbb4
+ languageName: node
+ linkType: hard
+
+"jest-environment-node@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-environment-node@npm:29.7.0"
+ dependencies:
+ "@jest/environment": "npm:^29.7.0"
+ "@jest/fake-timers": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ jest-mock: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ checksum: 10c0/61f04fec077f8b1b5c1a633e3612fc0c9aa79a0ab7b05600683428f1e01a4d35346c474bde6f439f9fcc1a4aa9a2861ff852d079a43ab64b02105d1004b2592b
+ languageName: node
+ linkType: hard
+
+"jest-get-type@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "jest-get-type@npm:29.6.3"
+ checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b
+ languageName: node
+ linkType: hard
+
+"jest-haste-map@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-haste-map@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ "@types/graceful-fs": "npm:^4.1.3"
+ "@types/node": "npm:*"
+ anymatch: "npm:^3.0.3"
+ fb-watchman: "npm:^2.0.0"
+ fsevents: "npm:^2.3.2"
+ graceful-fs: "npm:^4.2.9"
+ jest-regex-util: "npm:^29.6.3"
+ jest-util: "npm:^29.7.0"
+ jest-worker: "npm:^29.7.0"
+ micromatch: "npm:^4.0.4"
+ walker: "npm:^1.0.8"
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ checksum: 10c0/2683a8f29793c75a4728787662972fedd9267704c8f7ef9d84f2beed9a977f1cf5e998c07b6f36ba5603f53cb010c911fe8cd0ac9886e073fe28ca66beefd30c
+ languageName: node
+ linkType: hard
+
+"jest-leak-detector@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-leak-detector@npm:29.7.0"
+ dependencies:
+ jest-get-type: "npm:^29.6.3"
+ pretty-format: "npm:^29.7.0"
+ checksum: 10c0/71bb9f77fc489acb842a5c7be030f2b9acb18574dc9fb98b3100fc57d422b1abc55f08040884bd6e6dbf455047a62f7eaff12aa4058f7cbdc11558718ca6a395
+ languageName: node
+ linkType: hard
+
+"jest-matcher-utils@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-matcher-utils@npm:29.7.0"
+ dependencies:
+ chalk: "npm:^4.0.0"
+ jest-diff: "npm:^29.7.0"
+ jest-get-type: "npm:^29.6.3"
+ pretty-format: "npm:^29.7.0"
+ checksum: 10c0/0d0e70b28fa5c7d4dce701dc1f46ae0922102aadc24ed45d594dd9b7ae0a8a6ef8b216718d1ab79e451291217e05d4d49a82666e1a3cc2b428b75cd9c933244e
+ languageName: node
+ linkType: hard
+
+"jest-message-util@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-message-util@npm:29.7.0"
+ dependencies:
+ "@babel/code-frame": "npm:^7.12.13"
+ "@jest/types": "npm:^29.6.3"
+ "@types/stack-utils": "npm:^2.0.0"
+ chalk: "npm:^4.0.0"
+ graceful-fs: "npm:^4.2.9"
+ micromatch: "npm:^4.0.4"
+ pretty-format: "npm:^29.7.0"
+ slash: "npm:^3.0.0"
+ stack-utils: "npm:^2.0.3"
+ checksum: 10c0/850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22
+ languageName: node
+ linkType: hard
+
+"jest-mock@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-mock@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ jest-util: "npm:^29.7.0"
+ checksum: 10c0/7b9f8349ee87695a309fe15c46a74ab04c853369e5c40952d68061d9dc3159a0f0ed73e215f81b07ee97a9faaf10aebe5877a9d6255068a0977eae6a9ff1d5ac
+ languageName: node
+ linkType: hard
+
+"jest-pnp-resolver@npm:^1.2.2":
+ version: 1.2.3
+ resolution: "jest-pnp-resolver@npm:1.2.3"
+ peerDependencies:
+ jest-resolve: "*"
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+ checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac
+ languageName: node
+ linkType: hard
+
+"jest-regex-util@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "jest-regex-util@npm:29.6.3"
+ checksum: 10c0/4e33fb16c4f42111159cafe26397118dcfc4cf08bc178a67149fb05f45546a91928b820894572679d62559839d0992e21080a1527faad65daaae8743a5705a3b
+ languageName: node
+ linkType: hard
+
+"jest-resolve-dependencies@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-resolve-dependencies@npm:29.7.0"
+ dependencies:
+ jest-regex-util: "npm:^29.6.3"
+ jest-snapshot: "npm:^29.7.0"
+ checksum: 10c0/b6e9ad8ae5b6049474118ea6441dfddd385b6d1fc471db0136f7c8fbcfe97137a9665e4f837a9f49f15a29a1deb95a14439b7aec812f3f99d08f228464930f0d
+ languageName: node
+ linkType: hard
+
+"jest-resolve@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-resolve@npm:29.7.0"
+ dependencies:
+ chalk: "npm:^4.0.0"
+ graceful-fs: "npm:^4.2.9"
+ jest-haste-map: "npm:^29.7.0"
+ jest-pnp-resolver: "npm:^1.2.2"
+ jest-util: "npm:^29.7.0"
+ jest-validate: "npm:^29.7.0"
+ resolve: "npm:^1.20.0"
+ resolve.exports: "npm:^2.0.0"
+ slash: "npm:^3.0.0"
+ checksum: 10c0/59da5c9c5b50563e959a45e09e2eace783d7f9ac0b5dcc6375dea4c0db938d2ebda97124c8161310082760e8ebbeff9f6b177c15ca2f57fb424f637a5d2adb47
+ languageName: node
+ linkType: hard
+
+"jest-runner@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-runner@npm:29.7.0"
+ dependencies:
+ "@jest/console": "npm:^29.7.0"
+ "@jest/environment": "npm:^29.7.0"
+ "@jest/test-result": "npm:^29.7.0"
+ "@jest/transform": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ chalk: "npm:^4.0.0"
+ emittery: "npm:^0.13.1"
+ graceful-fs: "npm:^4.2.9"
+ jest-docblock: "npm:^29.7.0"
+ jest-environment-node: "npm:^29.7.0"
+ jest-haste-map: "npm:^29.7.0"
+ jest-leak-detector: "npm:^29.7.0"
+ jest-message-util: "npm:^29.7.0"
+ jest-resolve: "npm:^29.7.0"
+ jest-runtime: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ jest-watcher: "npm:^29.7.0"
+ jest-worker: "npm:^29.7.0"
+ p-limit: "npm:^3.1.0"
+ source-map-support: "npm:0.5.13"
+ checksum: 10c0/2194b4531068d939f14c8d3274fe5938b77fa73126aedf9c09ec9dec57d13f22c72a3b5af01ac04f5c1cf2e28d0ac0b4a54212a61b05f10b5d6b47f2a1097bb4
+ languageName: node
+ linkType: hard
+
+"jest-runtime@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-runtime@npm:29.7.0"
+ dependencies:
+ "@jest/environment": "npm:^29.7.0"
+ "@jest/fake-timers": "npm:^29.7.0"
+ "@jest/globals": "npm:^29.7.0"
+ "@jest/source-map": "npm:^29.6.3"
+ "@jest/test-result": "npm:^29.7.0"
+ "@jest/transform": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ chalk: "npm:^4.0.0"
+ cjs-module-lexer: "npm:^1.0.0"
+ collect-v8-coverage: "npm:^1.0.0"
+ glob: "npm:^7.1.3"
+ graceful-fs: "npm:^4.2.9"
+ jest-haste-map: "npm:^29.7.0"
+ jest-message-util: "npm:^29.7.0"
+ jest-mock: "npm:^29.7.0"
+ jest-regex-util: "npm:^29.6.3"
+ jest-resolve: "npm:^29.7.0"
+ jest-snapshot: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ slash: "npm:^3.0.0"
+ strip-bom: "npm:^4.0.0"
+ checksum: 10c0/7cd89a1deda0bda7d0941835434e44f9d6b7bd50b5c5d9b0fc9a6c990b2d4d2cab59685ab3cb2850ed4cc37059f6de903af5a50565d7f7f1192a77d3fd6dd2a6
+ languageName: node
+ linkType: hard
+
+"jest-snapshot@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-snapshot@npm:29.7.0"
+ dependencies:
+ "@babel/core": "npm:^7.11.6"
+ "@babel/generator": "npm:^7.7.2"
+ "@babel/plugin-syntax-jsx": "npm:^7.7.2"
+ "@babel/plugin-syntax-typescript": "npm:^7.7.2"
+ "@babel/types": "npm:^7.3.3"
+ "@jest/expect-utils": "npm:^29.7.0"
+ "@jest/transform": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ babel-preset-current-node-syntax: "npm:^1.0.0"
+ chalk: "npm:^4.0.0"
+ expect: "npm:^29.7.0"
+ graceful-fs: "npm:^4.2.9"
+ jest-diff: "npm:^29.7.0"
+ jest-get-type: "npm:^29.6.3"
+ jest-matcher-utils: "npm:^29.7.0"
+ jest-message-util: "npm:^29.7.0"
+ jest-util: "npm:^29.7.0"
+ natural-compare: "npm:^1.4.0"
+ pretty-format: "npm:^29.7.0"
+ semver: "npm:^7.5.3"
+ checksum: 10c0/6e9003c94ec58172b4a62864a91c0146513207bedf4e0a06e1e2ac70a4484088a2683e3a0538d8ea913bcfd53dc54a9b98a98cdfa562e7fe1d1339aeae1da570
+ languageName: node
+ linkType: hard
+
+"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-util@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ chalk: "npm:^4.0.0"
+ ci-info: "npm:^3.2.0"
+ graceful-fs: "npm:^4.2.9"
+ picomatch: "npm:^2.2.3"
+ checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150
+ languageName: node
+ linkType: hard
+
+"jest-validate@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-validate@npm:29.7.0"
+ dependencies:
+ "@jest/types": "npm:^29.6.3"
+ camelcase: "npm:^6.2.0"
+ chalk: "npm:^4.0.0"
+ jest-get-type: "npm:^29.6.3"
+ leven: "npm:^3.1.0"
+ pretty-format: "npm:^29.7.0"
+ checksum: 10c0/a20b930480c1ed68778c739f4739dce39423131bc070cd2505ddede762a5570a256212e9c2401b7ae9ba4d7b7c0803f03c5b8f1561c62348213aba18d9dbece2
+ languageName: node
+ linkType: hard
+
+"jest-watcher@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-watcher@npm:29.7.0"
+ dependencies:
+ "@jest/test-result": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ "@types/node": "npm:*"
+ ansi-escapes: "npm:^4.2.1"
+ chalk: "npm:^4.0.0"
+ emittery: "npm:^0.13.1"
+ jest-util: "npm:^29.7.0"
+ string-length: "npm:^4.0.1"
+ checksum: 10c0/ec6c75030562fc8f8c727cb8f3b94e75d831fc718785abfc196e1f2a2ebc9a2e38744a15147170039628a853d77a3b695561ce850375ede3a4ee6037a2574567
+ languageName: node
+ linkType: hard
+
+"jest-worker@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-worker@npm:29.7.0"
+ dependencies:
+ "@types/node": "npm:*"
+ jest-util: "npm:^29.7.0"
+ merge-stream: "npm:^2.0.0"
+ supports-color: "npm:^8.0.0"
+ checksum: 10c0/5570a3a005b16f46c131968b8a5b56d291f9bbb85ff4217e31c80bd8a02e7de799e59a54b95ca28d5c302f248b54cbffde2d177c2f0f52ffcee7504c6eabf660
+ languageName: node
+ linkType: hard
+
+"jest@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest@npm:29.7.0"
+ dependencies:
+ "@jest/core": "npm:^29.7.0"
+ "@jest/types": "npm:^29.6.3"
+ import-local: "npm:^3.0.2"
+ jest-cli: "npm:^29.7.0"
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+ bin:
+ jest: bin/jest.js
+ checksum: 10c0/f40eb8171cf147c617cc6ada49d062fbb03b4da666cb8d39cdbfb739a7d75eea4c3ca150fb072d0d273dce0c753db4d0467d54906ad0293f59c54f9db4a09d8b
+ languageName: node
+ linkType: hard
+
+"jju@npm:~1.4.0":
+ version: 1.4.0
+ resolution: "jju@npm:1.4.0"
+ checksum: 10c0/f3f444557e4364cfc06b1abf8331bf3778b26c0c8552ca54429bc0092652172fdea26cbffe33e1017b303d5aa506f7ede8571857400efe459cb7439180e2acad
+ languageName: node
+ linkType: hard
+
+"js-tokens@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "js-tokens@npm:4.0.0"
+ checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed
+ languageName: node
+ linkType: hard
+
+"js-yaml@npm:^3.13.1":
+ version: 3.14.1
+ resolution: "js-yaml@npm:3.14.1"
+ dependencies:
+ argparse: "npm:^1.0.7"
+ esprima: "npm:^4.0.0"
+ bin:
+ js-yaml: bin/js-yaml.js
+ checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b
+ languageName: node
+ linkType: hard
+
+"js-yaml@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "js-yaml@npm:4.1.0"
+ dependencies:
+ argparse: "npm:^2.0.1"
+ bin:
+ js-yaml: bin/js-yaml.js
+ checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f
+ languageName: node
+ linkType: hard
+
+"jsbn@npm:1.1.0":
+ version: 1.1.0
+ resolution: "jsbn@npm:1.1.0"
+ checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96
+ languageName: node
+ linkType: hard
+
+"jsesc@npm:^3.0.2":
+ version: 3.1.0
+ resolution: "jsesc@npm:3.1.0"
+ bin:
+ jsesc: bin/jsesc
+ checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1
+ languageName: node
+ linkType: hard
+
+"json-buffer@npm:3.0.1":
+ version: 3.0.1
+ resolution: "json-buffer@npm:3.0.1"
+ checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7
+ languageName: node
+ linkType: hard
+
+"json-parse-even-better-errors@npm:^2.3.0":
+ version: 2.3.1
+ resolution: "json-parse-even-better-errors@npm:2.3.1"
+ checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3
+ languageName: node
+ linkType: hard
+
+"json-schema-traverse@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "json-schema-traverse@npm:0.4.1"
+ checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce
+ languageName: node
+ linkType: hard
+
+"json-schema-traverse@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "json-schema-traverse@npm:1.0.0"
+ checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6
+ languageName: node
+ linkType: hard
+
+"json-stable-stringify-without-jsonify@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "json-stable-stringify-without-jsonify@npm:1.0.1"
+ checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5
+ languageName: node
+ linkType: hard
+
+"json5@npm:^2.2.3":
+ version: 2.2.3
+ resolution: "json5@npm:2.2.3"
+ bin:
+ json5: lib/cli.js
+ checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c
+ languageName: node
+ linkType: hard
+
+"jsonfile@npm:^6.0.1":
+ version: 6.1.0
+ resolution: "jsonfile@npm:6.1.0"
+ dependencies:
+ graceful-fs: "npm:^4.1.6"
+ universalify: "npm:^2.0.0"
+ dependenciesMeta:
+ graceful-fs:
+ optional: true
+ checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865
+ languageName: node
+ linkType: hard
+
+"jsonschema@npm:^1.4.1":
+ version: 1.5.0
+ resolution: "jsonschema@npm:1.5.0"
+ checksum: 10c0/c24ddb8d741f02efc0da3ad9b597a275f6b595062903d3edbfaa535c3f9c4c98613df68da5cb6635ed9aeab30d658986fea61d7662fc5b2b92840d5a1e21235e
+ languageName: node
+ linkType: hard
+
+"jsonschema@npm:~1.4.1":
+ version: 1.4.1
+ resolution: "jsonschema@npm:1.4.1"
+ checksum: 10c0/c3422d3fc7d33ff7234a806ffa909bb6fb5d1cd664bea229c64a1785dc04cbccd5fc76cf547c6ab6dd7881dbcaf3540a6a9f925a5956c61a9cd3e23a3c1796ef
+ languageName: node
+ linkType: hard
+
+"keyv@npm:^4.5.4":
+ version: 4.5.4
+ resolution: "keyv@npm:4.5.4"
+ dependencies:
+ json-buffer: "npm:3.0.1"
+ checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e
+ languageName: node
+ linkType: hard
+
+"kleur@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "kleur@npm:3.0.3"
+ checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b
+ languageName: node
+ linkType: hard
+
+"leven@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "leven@npm:3.1.0"
+ checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df
+ languageName: node
+ linkType: hard
+
+"levn@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "levn@npm:0.4.1"
+ dependencies:
+ prelude-ls: "npm:^1.2.1"
+ type-check: "npm:~0.4.0"
+ checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e
+ languageName: node
+ linkType: hard
+
+"lines-and-columns@npm:^1.1.6":
+ version: 1.2.4
+ resolution: "lines-and-columns@npm:1.2.4"
+ checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d
+ languageName: node
+ linkType: hard
+
+"linkify-it@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "linkify-it@npm:5.0.0"
+ dependencies:
+ uc.micro: "npm:^2.0.0"
+ checksum: 10c0/ff4abbcdfa2003472fc3eb4b8e60905ec97718e11e33cca52059919a4c80cc0e0c2a14d23e23d8c00e5402bc5a885cdba8ca053a11483ab3cc8b3c7a52f88e2d
+ languageName: node
+ linkType: hard
+
+"locate-path@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "locate-path@npm:5.0.0"
+ dependencies:
+ p-locate: "npm:^4.1.0"
+ checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59
+ languageName: node
+ linkType: hard
+
+"locate-path@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "locate-path@npm:6.0.0"
+ dependencies:
+ p-locate: "npm:^5.0.0"
+ checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3
+ languageName: node
+ linkType: hard
+
+"lodash.memoize@npm:^4.1.2":
+ version: 4.1.2
+ resolution: "lodash.memoize@npm:4.1.2"
+ checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8
+ languageName: node
+ linkType: hard
+
+"lodash.merge@npm:^4.6.2":
+ version: 4.6.2
+ resolution: "lodash.merge@npm:4.6.2"
+ checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506
+ languageName: node
+ linkType: hard
+
+"lodash.truncate@npm:^4.4.2":
+ version: 4.4.2
+ resolution: "lodash.truncate@npm:4.4.2"
+ checksum: 10c0/4e870d54e8a6c86c8687e057cec4069d2e941446ccab7f40b4d9555fa5872d917d0b6aa73bece7765500a3123f1723bcdba9ae881b679ef120bba9e1a0b0ed70
+ languageName: node
+ linkType: hard
+
+"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
+ version: 10.4.3
+ resolution: "lru-cache@npm:10.4.3"
+ checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb
+ languageName: node
+ linkType: hard
+
+"lru-cache@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "lru-cache@npm:5.1.1"
+ dependencies:
+ yallist: "npm:^3.0.2"
+ checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482
+ languageName: node
+ linkType: hard
+
+"lunr@npm:^2.3.9":
+ version: 2.3.9
+ resolution: "lunr@npm:2.3.9"
+ checksum: 10c0/77d7dbb4fbd602aac161e2b50887d8eda28c0fa3b799159cee380fbb311f1e614219126ecbbd2c3a9c685f1720a8109b3c1ca85cc893c39b6c9cc6a62a1d8a8b
+ languageName: node
+ linkType: hard
+
+"make-dir@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "make-dir@npm:4.0.0"
+ dependencies:
+ semver: "npm:^7.5.3"
+ checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68
+ languageName: node
+ linkType: hard
+
+"make-error@npm:^1.1.1, make-error@npm:^1.3.6":
+ version: 1.3.6
+ resolution: "make-error@npm:1.3.6"
+ checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f
+ languageName: node
+ linkType: hard
+
+"make-fetch-happen@npm:^14.0.3":
+ version: 14.0.3
+ resolution: "make-fetch-happen@npm:14.0.3"
+ dependencies:
+ "@npmcli/agent": "npm:^3.0.0"
+ cacache: "npm:^19.0.1"
+ http-cache-semantics: "npm:^4.1.1"
+ minipass: "npm:^7.0.2"
+ minipass-fetch: "npm:^4.0.0"
+ minipass-flush: "npm:^1.0.5"
+ minipass-pipeline: "npm:^1.2.4"
+ negotiator: "npm:^1.0.0"
+ proc-log: "npm:^5.0.0"
+ promise-retry: "npm:^2.0.1"
+ ssri: "npm:^12.0.0"
+ checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0
+ languageName: node
+ linkType: hard
+
+"makeerror@npm:1.0.12":
+ version: 1.0.12
+ resolution: "makeerror@npm:1.0.12"
+ dependencies:
+ tmpl: "npm:1.0.5"
+ checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c
+ languageName: node
+ linkType: hard
+
+"markdown-it@npm:^14.1.0":
+ version: 14.1.0
+ resolution: "markdown-it@npm:14.1.0"
+ dependencies:
+ argparse: "npm:^2.0.1"
+ entities: "npm:^4.4.0"
+ linkify-it: "npm:^5.0.0"
+ mdurl: "npm:^2.0.0"
+ punycode.js: "npm:^2.3.1"
+ uc.micro: "npm:^2.1.0"
+ bin:
+ markdown-it: bin/markdown-it.mjs
+ checksum: 10c0/9a6bb444181d2db7016a4173ae56a95a62c84d4cbfb6916a399b11d3e6581bf1cc2e4e1d07a2f022ae72c25f56db90fbe1e529fca16fbf9541659dc53480d4b4
+ languageName: node
+ linkType: hard
+
+"mdurl@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "mdurl@npm:2.0.0"
+ checksum: 10c0/633db522272f75ce4788440669137c77540d74a83e9015666a9557a152c02e245b192edc20bc90ae953bbab727503994a53b236b4d9c99bdaee594d0e7dd2ce0
+ languageName: node
+ linkType: hard
+
+"merge-stream@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "merge-stream@npm:2.0.0"
+ checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5
+ languageName: node
+ linkType: hard
+
+"merge2@npm:^1.3.0":
+ version: 1.4.1
+ resolution: "merge2@npm:1.4.1"
+ checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb
+ languageName: node
+ linkType: hard
+
+"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8":
+ version: 4.0.8
+ resolution: "micromatch@npm:4.0.8"
+ dependencies:
+ braces: "npm:^3.0.3"
+ picomatch: "npm:^2.3.1"
+ checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8
+ languageName: node
+ linkType: hard
+
+"mime-db@npm:1.52.0":
+ version: 1.52.0
+ resolution: "mime-db@npm:1.52.0"
+ checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa
+ languageName: node
+ linkType: hard
+
+"mime-types@npm:^2.1.35":
+ version: 2.1.35
+ resolution: "mime-types@npm:2.1.35"
+ dependencies:
+ mime-db: "npm:1.52.0"
+ checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2
+ languageName: node
+ linkType: hard
+
+"mimic-fn@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "mimic-fn@npm:2.1.0"
+ checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4
+ languageName: node
+ linkType: hard
+
+"minimatch@npm:^3.0.4, minimatch@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "minimatch@npm:3.1.2"
+ dependencies:
+ brace-expansion: "npm:^1.1.7"
+ checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311
+ languageName: node
+ linkType: hard
+
+"minimatch@npm:^5.0.1":
+ version: 5.1.6
+ resolution: "minimatch@npm:5.1.6"
+ dependencies:
+ brace-expansion: "npm:^2.0.1"
+ checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3
+ languageName: node
+ linkType: hard
+
+"minimatch@npm:^8.0.2":
+ version: 8.0.4
+ resolution: "minimatch@npm:8.0.4"
+ dependencies:
+ brace-expansion: "npm:^2.0.1"
+ checksum: 10c0/a0a394c356dd5b4cb7f821720841a82fa6f07c9c562c5b716909d1b6ec5e56a7e4c4b5029da26dd256b7d2b3a3f38cbf9ddd8680e887b9b5282b09c05501c1ca
+ languageName: node
+ linkType: hard
+
+"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5":
+ version: 9.0.5
+ resolution: "minimatch@npm:9.0.5"
+ dependencies:
+ brace-expansion: "npm:^2.0.1"
+ checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed
+ languageName: node
+ linkType: hard
+
+"minipass-collect@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "minipass-collect@npm:2.0.1"
+ dependencies:
+ minipass: "npm:^7.0.3"
+ checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e
+ languageName: node
+ linkType: hard
+
+"minipass-fetch@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "minipass-fetch@npm:4.0.0"
+ dependencies:
+ encoding: "npm:^0.1.13"
+ minipass: "npm:^7.0.3"
+ minipass-sized: "npm:^1.0.3"
+ minizlib: "npm:^3.0.1"
+ dependenciesMeta:
+ encoding:
+ optional: true
+ checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b
+ languageName: node
+ linkType: hard
+
+"minipass-flush@npm:^1.0.5":
+ version: 1.0.5
+ resolution: "minipass-flush@npm:1.0.5"
+ dependencies:
+ minipass: "npm:^3.0.0"
+ checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd
+ languageName: node
+ linkType: hard
+
+"minipass-pipeline@npm:^1.2.4":
+ version: 1.2.4
+ resolution: "minipass-pipeline@npm:1.2.4"
+ dependencies:
+ minipass: "npm:^3.0.0"
+ checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2
+ languageName: node
+ linkType: hard
+
+"minipass-sized@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "minipass-sized@npm:1.0.3"
+ dependencies:
+ minipass: "npm:^3.0.0"
+ checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb
+ languageName: node
+ linkType: hard
+
+"minipass@npm:^3.0.0":
+ version: 3.3.6
+ resolution: "minipass@npm:3.3.6"
+ dependencies:
+ yallist: "npm:^4.0.0"
+ checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c
+ languageName: node
+ linkType: hard
+
+"minipass@npm:^4.2.4":
+ version: 4.2.8
+ resolution: "minipass@npm:4.2.8"
+ checksum: 10c0/4ea76b030d97079f4429d6e8a8affd90baf1b6a1898977c8ccce4701c5a2ba2792e033abc6709373f25c2c4d4d95440d9d5e9464b46b7b76ca44d2ce26d939ce
+ languageName: node
+ linkType: hard
+
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2":
+ version: 7.1.2
+ resolution: "minipass@npm:7.1.2"
+ checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557
+ languageName: node
+ linkType: hard
+
+"minizlib@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "minizlib@npm:3.0.1"
+ dependencies:
+ minipass: "npm:^7.0.4"
+ rimraf: "npm:^5.0.5"
+ checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093
+ languageName: node
+ linkType: hard
+
+"mkdirp@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "mkdirp@npm:3.0.1"
+ bin:
+ mkdirp: dist/cjs/src/bin.js
+ checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d
+ languageName: node
+ linkType: hard
+
+"ms@npm:^2.1.3":
+ version: 2.1.3
+ resolution: "ms@npm:2.1.3"
+ checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48
+ languageName: node
+ linkType: hard
+
+"natural-compare@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "natural-compare@npm:1.4.0"
+ checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447
+ languageName: node
+ linkType: hard
+
+"negotiator@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "negotiator@npm:1.0.0"
+ checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b
+ languageName: node
+ linkType: hard
+
+"node-gyp@npm:latest":
+ version: 11.1.0
+ resolution: "node-gyp@npm:11.1.0"
+ dependencies:
+ env-paths: "npm:^2.2.0"
+ exponential-backoff: "npm:^3.1.1"
+ glob: "npm:^10.3.10"
+ graceful-fs: "npm:^4.2.6"
+ make-fetch-happen: "npm:^14.0.3"
+ nopt: "npm:^8.0.0"
+ proc-log: "npm:^5.0.0"
+ semver: "npm:^7.3.5"
+ tar: "npm:^7.4.3"
+ which: "npm:^5.0.0"
+ bin:
+ node-gyp: bin/node-gyp.js
+ checksum: 10c0/c38977ce502f1ea41ba2b8721bd5b49bc3d5b3f813eabfac8414082faf0620ccb5211e15c4daecc23ed9f5e3e9cc4da00e575a0bcfc2a95a069294f2afa1e0cd
+ languageName: node
+ linkType: hard
+
+"node-int64@npm:^0.4.0":
+ version: 0.4.0
+ resolution: "node-int64@npm:0.4.0"
+ checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a
+ languageName: node
+ linkType: hard
+
+"node-releases@npm:^2.0.19":
+ version: 2.0.19
+ resolution: "node-releases@npm:2.0.19"
+ checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa
+ languageName: node
+ linkType: hard
+
+"nopt@npm:^8.0.0":
+ version: 8.1.0
+ resolution: "nopt@npm:8.1.0"
+ dependencies:
+ abbrev: "npm:^3.0.0"
+ bin:
+ nopt: bin/nopt.js
+ checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef
+ languageName: node
+ linkType: hard
+
+"normalize-path@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "normalize-path@npm:3.0.0"
+ checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046
+ languageName: node
+ linkType: hard
+
+"npm-run-path@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "npm-run-path@npm:4.0.1"
+ dependencies:
+ path-key: "npm:^3.0.0"
+ checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac
+ languageName: node
+ linkType: hard
+
+"onetime@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "onetime@npm:5.1.2"
+ dependencies:
+ mimic-fn: "npm:^2.1.0"
+ checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f
+ languageName: node
+ linkType: hard
+
+"optionator@npm:^0.9.3":
+ version: 0.9.4
+ resolution: "optionator@npm:0.9.4"
+ dependencies:
+ deep-is: "npm:^0.1.3"
+ fast-levenshtein: "npm:^2.0.6"
+ levn: "npm:^0.4.1"
+ prelude-ls: "npm:^1.2.1"
+ type-check: "npm:^0.4.0"
+ word-wrap: "npm:^1.2.5"
+ checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675
+ languageName: node
+ linkType: hard
+
+"p-limit@npm:^2.2.0":
+ version: 2.3.0
+ resolution: "p-limit@npm:2.3.0"
+ dependencies:
+ p-try: "npm:^2.0.0"
+ checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12
+ languageName: node
+ linkType: hard
+
+"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "p-limit@npm:3.1.0"
+ dependencies:
+ yocto-queue: "npm:^0.1.0"
+ checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a
+ languageName: node
+ linkType: hard
+
+"p-locate@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "p-locate@npm:4.1.0"
+ dependencies:
+ p-limit: "npm:^2.2.0"
+ checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9
+ languageName: node
+ linkType: hard
+
+"p-locate@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "p-locate@npm:5.0.0"
+ dependencies:
+ p-limit: "npm:^3.0.2"
+ checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a
+ languageName: node
+ linkType: hard
+
+"p-map@npm:^7.0.2":
+ version: 7.0.3
+ resolution: "p-map@npm:7.0.3"
+ checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c
+ languageName: node
+ linkType: hard
+
+"p-try@npm:^2.0.0":
+ version: 2.2.0
+ resolution: "p-try@npm:2.2.0"
+ checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f
+ languageName: node
+ linkType: hard
+
+"parent-module@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "parent-module@npm:1.0.1"
+ dependencies:
+ callsites: "npm:^3.0.0"
+ checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556
+ languageName: node
+ linkType: hard
+
+"parse-json@npm:^5.2.0":
+ version: 5.2.0
+ resolution: "parse-json@npm:5.2.0"
+ dependencies:
+ "@babel/code-frame": "npm:^7.0.0"
+ error-ex: "npm:^1.3.1"
+ json-parse-even-better-errors: "npm:^2.3.0"
+ lines-and-columns: "npm:^1.1.6"
+ checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585
+ languageName: node
+ linkType: hard
+
+"path-exists@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "path-exists@npm:4.0.0"
+ checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b
+ languageName: node
+ linkType: hard
+
+"path-key@npm:^3.0.0, path-key@npm:^3.1.0":
+ version: 3.1.1
+ resolution: "path-key@npm:3.1.1"
+ checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c
+ languageName: node
+ linkType: hard
+
+"path-parse@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "path-parse@npm:1.0.7"
+ checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1
+ languageName: node
+ linkType: hard
+
+"path-scurry@npm:^1.6.1":
+ version: 1.11.1
+ resolution: "path-scurry@npm:1.11.1"
+ dependencies:
+ lru-cache: "npm:^10.2.0"
+ minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0"
+ checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d
+ languageName: node
+ linkType: hard
+
+"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "picocolors@npm:1.1.1"
+ checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58
+ languageName: node
+ linkType: hard
+
+"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1":
+ version: 2.3.1
+ resolution: "picomatch@npm:2.3.1"
+ checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be
+ languageName: node
+ linkType: hard
+
+"pirates@npm:^4.0.4":
+ version: 4.0.6
+ resolution: "pirates@npm:4.0.6"
+ checksum: 10c0/00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36
+ languageName: node
+ linkType: hard
+
+"pkg-dir@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "pkg-dir@npm:4.2.0"
+ dependencies:
+ find-up: "npm:^4.0.0"
+ checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728
+ languageName: node
+ linkType: hard
+
+"prelude-ls@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "prelude-ls@npm:1.2.1"
+ checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd
+ languageName: node
+ linkType: hard
+
+"prettier-linter-helpers@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "prettier-linter-helpers@npm:1.0.0"
+ dependencies:
+ fast-diff: "npm:^1.1.2"
+ checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab
+ languageName: node
+ linkType: hard
+
+"prettier@npm:^3.4.2":
+ version: 3.5.1
+ resolution: "prettier@npm:3.5.1"
+ bin:
+ prettier: bin/prettier.cjs
+ checksum: 10c0/9f6f810eae455d6e4213845151a484a2338f2e0d6a8b84ee8e13a83af8a2421ef6c1e31e61e4b135671fb57b9541f6624648880cc2061ac803e243ac898c0123
+ languageName: node
+ linkType: hard
+
+"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "pretty-format@npm:29.7.0"
+ dependencies:
+ "@jest/schemas": "npm:^29.6.3"
+ ansi-styles: "npm:^5.0.0"
+ react-is: "npm:^18.0.0"
+ checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f
+ languageName: node
+ linkType: hard
+
+"proc-log@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "proc-log@npm:5.0.0"
+ checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3
+ languageName: node
+ linkType: hard
+
+"promise-retry@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "promise-retry@npm:2.0.1"
+ dependencies:
+ err-code: "npm:^2.0.2"
+ retry: "npm:^0.12.0"
+ checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96
+ languageName: node
+ linkType: hard
+
+"prompts@npm:^2.0.1":
+ version: 2.4.2
+ resolution: "prompts@npm:2.4.2"
+ dependencies:
+ kleur: "npm:^3.0.3"
+ sisteransi: "npm:^1.0.5"
+ checksum: 10c0/16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4
+ languageName: node
+ linkType: hard
+
+"punycode.js@npm:^2.3.1":
+ version: 2.3.1
+ resolution: "punycode.js@npm:2.3.1"
+ checksum: 10c0/1d12c1c0e06127fa5db56bd7fdf698daf9a78104456a6b67326877afc21feaa821257b171539caedd2f0524027fa38e67b13dd094159c8d70b6d26d2bea4dfdb
+ languageName: node
+ linkType: hard
+
+"punycode@npm:^2.1.0, punycode@npm:^2.3.1":
+ version: 2.3.1
+ resolution: "punycode@npm:2.3.1"
+ checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9
+ languageName: node
+ linkType: hard
+
+"pure-rand@npm:^6.0.0":
+ version: 6.1.0
+ resolution: "pure-rand@npm:6.1.0"
+ checksum: 10c0/1abe217897bf74dcb3a0c9aba3555fe975023147b48db540aa2faf507aee91c03bf54f6aef0eb2bf59cc259a16d06b28eca37f0dc426d94f4692aeff02fb0e65
+ languageName: node
+ linkType: hard
+
+"queue-microtask@npm:^1.2.2":
+ version: 1.2.3
+ resolution: "queue-microtask@npm:1.2.3"
+ checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102
+ languageName: node
+ linkType: hard
+
+"react-is@npm:^18.0.0":
+ version: 18.3.1
+ resolution: "react-is@npm:18.3.1"
+ checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072
+ languageName: node
+ linkType: hard
+
+"require-directory@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "require-directory@npm:2.1.1"
+ checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99
+ languageName: node
+ linkType: hard
+
+"require-from-string@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "require-from-string@npm:2.0.2"
+ checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2
+ languageName: node
+ linkType: hard
+
+"resolve-cwd@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "resolve-cwd@npm:3.0.0"
+ dependencies:
+ resolve-from: "npm:^5.0.0"
+ checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4
+ languageName: node
+ linkType: hard
+
+"resolve-from@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "resolve-from@npm:4.0.0"
+ checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190
+ languageName: node
+ linkType: hard
+
+"resolve-from@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "resolve-from@npm:5.0.0"
+ checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2
+ languageName: node
+ linkType: hard
+
+"resolve.exports@npm:^2.0.0":
+ version: 2.0.3
+ resolution: "resolve.exports@npm:2.0.3"
+ checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d
+ languageName: node
+ linkType: hard
+
+"resolve@npm:^1.20.0, resolve@npm:~1.22.2":
+ version: 1.22.10
+ resolution: "resolve@npm:1.22.10"
+ dependencies:
+ is-core-module: "npm:^2.16.0"
+ path-parse: "npm:^1.0.7"
+ supports-preserve-symlinks-flag: "npm:^1.0.0"
+ bin:
+ resolve: bin/resolve
+ checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203
+ languageName: node
+ linkType: hard
+
+"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A~1.22.2#optional!builtin":
+ version: 1.22.10
+ resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d"
+ dependencies:
+ is-core-module: "npm:^2.16.0"
+ path-parse: "npm:^1.0.7"
+ supports-preserve-symlinks-flag: "npm:^1.0.0"
+ bin:
+ resolve: bin/resolve
+ checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939
+ languageName: node
+ linkType: hard
+
+"retry@npm:^0.12.0":
+ version: 0.12.0
+ resolution: "retry@npm:0.12.0"
+ checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe
+ languageName: node
+ linkType: hard
+
+"reusify@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "reusify@npm:1.0.4"
+ checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107
+ languageName: node
+ linkType: hard
+
+"rimraf@npm:^5.0.5":
+ version: 5.0.10
+ resolution: "rimraf@npm:5.0.10"
+ dependencies:
+ glob: "npm:^10.3.7"
+ bin:
+ rimraf: dist/esm/bin.mjs
+ checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc
+ languageName: node
+ linkType: hard
+
+"run-parallel@npm:^1.1.9":
+ version: 1.2.0
+ resolution: "run-parallel@npm:1.2.0"
+ dependencies:
+ queue-microtask: "npm:^1.2.2"
+ checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39
+ languageName: node
+ linkType: hard
+
+"safer-buffer@npm:>= 2.1.2 < 3.0.0":
+ version: 2.1.2
+ resolution: "safer-buffer@npm:2.1.2"
+ checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4
+ languageName: node
+ linkType: hard
+
+"semver@npm:^6.3.0, semver@npm:^6.3.1":
+ version: 6.3.1
+ resolution: "semver@npm:6.3.1"
+ bin:
+ semver: bin/semver.js
+ checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d
+ languageName: node
+ linkType: hard
+
+"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.1":
+ version: 7.7.1
+ resolution: "semver@npm:7.7.1"
+ bin:
+ semver: bin/semver.js
+ checksum: 10c0/fd603a6fb9c399c6054015433051bdbe7b99a940a8fb44b85c2b524c4004b023d7928d47cb22154f8d054ea7ee8597f586605e05b52047f048278e4ac56ae958
+ languageName: node
+ linkType: hard
+
+"shebang-command@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "shebang-command@npm:2.0.0"
+ dependencies:
+ shebang-regex: "npm:^3.0.0"
+ checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e
+ languageName: node
+ linkType: hard
+
+"shebang-regex@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "shebang-regex@npm:3.0.0"
+ checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690
+ languageName: node
+ linkType: hard
+
+"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7":
+ version: 3.0.7
+ resolution: "signal-exit@npm:3.0.7"
+ checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912
+ languageName: node
+ linkType: hard
+
+"sisteransi@npm:^1.0.5":
+ version: 1.0.5
+ resolution: "sisteransi@npm:1.0.5"
+ checksum: 10c0/230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46
+ languageName: node
+ linkType: hard
+
+"slash@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "slash@npm:3.0.0"
+ checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b
+ languageName: node
+ linkType: hard
+
+"slice-ansi@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "slice-ansi@npm:4.0.0"
+ dependencies:
+ ansi-styles: "npm:^4.0.0"
+ astral-regex: "npm:^2.0.0"
+ is-fullwidth-code-point: "npm:^3.0.0"
+ checksum: 10c0/6c25678db1270d4793e0327620f1e0f9f5bea4630123f51e9e399191bc52c87d6e6de53ed33538609e5eacbd1fab769fae00f3705d08d029f02102a540648918
+ languageName: node
+ linkType: hard
+
+"smart-buffer@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "smart-buffer@npm:4.2.0"
+ checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539
+ languageName: node
+ linkType: hard
+
+"socks-proxy-agent@npm:^8.0.3":
+ version: 8.0.5
+ resolution: "socks-proxy-agent@npm:8.0.5"
+ dependencies:
+ agent-base: "npm:^7.1.2"
+ debug: "npm:^4.3.4"
+ socks: "npm:^2.8.3"
+ checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6
+ languageName: node
+ linkType: hard
+
+"socks@npm:^2.8.3":
+ version: 2.8.4
+ resolution: "socks@npm:2.8.4"
+ dependencies:
+ ip-address: "npm:^9.0.5"
+ smart-buffer: "npm:^4.2.0"
+ checksum: 10c0/00c3271e233ccf1fb83a3dd2060b94cc37817e0f797a93c560b9a7a86c4a0ec2961fb31263bdd24a3c28945e24868b5f063cd98744171d9e942c513454b50ae5
+ languageName: node
+ linkType: hard
+
+"source-map-support@npm:0.5.13":
+ version: 0.5.13
+ resolution: "source-map-support@npm:0.5.13"
+ dependencies:
+ buffer-from: "npm:^1.0.0"
+ source-map: "npm:^0.6.0"
+ checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e
+ languageName: node
+ linkType: hard
+
+"source-map@npm:^0.6.0, source-map@npm:^0.6.1":
+ version: 0.6.1
+ resolution: "source-map@npm:0.6.1"
+ checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011
+ languageName: node
+ linkType: hard
+
+"sprintf-js@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "sprintf-js@npm:1.1.3"
+ checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec
+ languageName: node
+ linkType: hard
+
+"sprintf-js@npm:~1.0.2":
+ version: 1.0.3
+ resolution: "sprintf-js@npm:1.0.3"
+ checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb
+ languageName: node
+ linkType: hard
+
+"ssri@npm:^12.0.0":
+ version: 12.0.0
+ resolution: "ssri@npm:12.0.0"
+ dependencies:
+ minipass: "npm:^7.0.3"
+ checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d
+ languageName: node
+ linkType: hard
+
+"stack-utils@npm:^2.0.3":
+ version: 2.0.6
+ resolution: "stack-utils@npm:2.0.6"
+ dependencies:
+ escape-string-regexp: "npm:^2.0.0"
+ checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a
+ languageName: node
+ linkType: hard
+
+"string-length@npm:^4.0.1":
+ version: 4.0.2
+ resolution: "string-length@npm:4.0.2"
+ dependencies:
+ char-regex: "npm:^1.0.2"
+ strip-ansi: "npm:^6.0.0"
+ checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c
+ languageName: node
+ linkType: hard
+
+"string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
+ version: 4.2.3
+ resolution: "string-width@npm:4.2.3"
+ dependencies:
+ emoji-regex: "npm:^8.0.0"
+ is-fullwidth-code-point: "npm:^3.0.0"
+ strip-ansi: "npm:^6.0.1"
+ checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b
+ languageName: node
+ linkType: hard
+
+"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "strip-ansi@npm:6.0.1"
+ dependencies:
+ ansi-regex: "npm:^5.0.1"
+ checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952
+ languageName: node
+ linkType: hard
+
+"strip-bom@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "strip-bom@npm:4.0.0"
+ checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef
+ languageName: node
+ linkType: hard
+
+"strip-final-newline@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "strip-final-newline@npm:2.0.0"
+ checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f
+ languageName: node
+ linkType: hard
+
+"strip-json-comments@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "strip-json-comments@npm:3.1.1"
+ checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd
+ languageName: node
+ linkType: hard
+
+"supports-color@npm:^7.1.0":
+ version: 7.2.0
+ resolution: "supports-color@npm:7.2.0"
+ dependencies:
+ has-flag: "npm:^4.0.0"
+ checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124
+ languageName: node
+ linkType: hard
+
+"supports-color@npm:^8.0.0":
+ version: 8.1.1
+ resolution: "supports-color@npm:8.1.1"
+ dependencies:
+ has-flag: "npm:^4.0.0"
+ checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89
+ languageName: node
+ linkType: hard
+
+"supports-preserve-symlinks-flag@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
+ checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39
+ languageName: node
+ linkType: hard
+
+"synckit@npm:^0.9.1":
+ version: 0.9.2
+ resolution: "synckit@npm:0.9.2"
+ dependencies:
+ "@pkgr/core": "npm:^0.1.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59
+ languageName: node
+ linkType: hard
+
+"table@npm:^6.8.2":
+ version: 6.9.0
+ resolution: "table@npm:6.9.0"
+ dependencies:
+ ajv: "npm:^8.0.1"
+ lodash.truncate: "npm:^4.4.2"
+ slice-ansi: "npm:^4.0.0"
+ string-width: "npm:^4.2.3"
+ strip-ansi: "npm:^6.0.1"
+ checksum: 10c0/35646185712bb65985fbae5975dda46696325844b78735f95faefae83e86df0a265277819a3e67d189de6e858c509b54e66ca3958ffd51bde56ef1118d455bf4
+ languageName: node
+ linkType: hard
+
+"tar@npm:^7.4.3":
+ version: 7.4.3
+ resolution: "tar@npm:7.4.3"
+ dependencies:
+ "@isaacs/fs-minipass": "npm:^4.0.0"
+ chownr: "npm:^3.0.0"
+ minipass: "npm:^7.1.2"
+ minizlib: "npm:^3.0.1"
+ mkdirp: "npm:^3.0.1"
+ yallist: "npm:^5.0.0"
+ checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d
+ languageName: node
+ linkType: hard
+
+"test-exclude@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "test-exclude@npm:6.0.0"
+ dependencies:
+ "@istanbuljs/schema": "npm:^0.1.2"
+ glob: "npm:^7.1.4"
+ minimatch: "npm:^3.0.4"
+ checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57
+ languageName: node
+ linkType: hard
+
+"tmpl@npm:1.0.5":
+ version: 1.0.5
+ resolution: "tmpl@npm:1.0.5"
+ checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9
+ languageName: node
+ linkType: hard
+
+"to-regex-range@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "to-regex-range@npm:5.0.1"
+ dependencies:
+ is-number: "npm:^7.0.0"
+ checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892
+ languageName: node
+ linkType: hard
+
+"ts-api-utils@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "ts-api-utils@npm:2.0.1"
+ peerDependencies:
+ typescript: ">=4.8.4"
+ checksum: 10c0/23fd56a958b332cac00150a652e4c84730df30571bd2faa1ba6d7b511356d1a61656621492bb6c7f15dd6e18847a1408357a0e406671d358115369a17f5bfedd
+ languageName: node
+ linkType: hard
+
+"ts-jest@npm:^29.2.5":
+ version: 29.2.5
+ resolution: "ts-jest@npm:29.2.5"
+ dependencies:
+ bs-logger: "npm:^0.2.6"
+ ejs: "npm:^3.1.10"
+ fast-json-stable-stringify: "npm:^2.1.0"
+ jest-util: "npm:^29.0.0"
+ json5: "npm:^2.2.3"
+ lodash.memoize: "npm:^4.1.2"
+ make-error: "npm:^1.3.6"
+ semver: "npm:^7.6.3"
+ yargs-parser: "npm:^21.1.1"
+ peerDependencies:
+ "@babel/core": ">=7.0.0-beta.0 <8"
+ "@jest/transform": ^29.0.0
+ "@jest/types": ^29.0.0
+ babel-jest: ^29.0.0
+ jest: ^29.0.0
+ typescript: ">=4.3 <6"
+ peerDependenciesMeta:
+ "@babel/core":
+ optional: true
+ "@jest/transform":
+ optional: true
+ "@jest/types":
+ optional: true
+ babel-jest:
+ optional: true
+ esbuild:
+ optional: true
+ bin:
+ ts-jest: cli.js
+ checksum: 10c0/acb62d168faec073e64b20873b583974ba8acecdb94681164eb346cef82ade8fb481c5b979363e01a97ce4dd1e793baf64d9efd90720bc941ad7fc1c3d6f3f68
+ languageName: node
+ linkType: hard
+
+"ts-node@npm:^10.9.2":
+ version: 10.9.2
+ resolution: "ts-node@npm:10.9.2"
+ dependencies:
+ "@cspotcode/source-map-support": "npm:^0.8.0"
+ "@tsconfig/node10": "npm:^1.0.7"
+ "@tsconfig/node12": "npm:^1.0.7"
+ "@tsconfig/node14": "npm:^1.0.0"
+ "@tsconfig/node16": "npm:^1.0.2"
+ acorn: "npm:^8.4.1"
+ acorn-walk: "npm:^8.1.1"
+ arg: "npm:^4.1.0"
+ create-require: "npm:^1.1.0"
+ diff: "npm:^4.0.1"
+ make-error: "npm:^1.1.1"
+ v8-compile-cache-lib: "npm:^3.0.1"
+ yn: "npm:3.1.1"
+ peerDependencies:
+ "@swc/core": ">=1.2.50"
+ "@swc/wasm": ">=1.2.50"
+ "@types/node": "*"
+ typescript: ">=2.7"
+ peerDependenciesMeta:
+ "@swc/core":
+ optional: true
+ "@swc/wasm":
+ optional: true
+ bin:
+ ts-node: dist/bin.js
+ ts-node-cwd: dist/bin-cwd.js
+ ts-node-esm: dist/bin-esm.js
+ ts-node-script: dist/bin-script.js
+ ts-node-transpile-only: dist/bin-transpile.js
+ ts-script: dist/bin-script-deprecated.js
+ checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2
+ languageName: node
+ linkType: hard
+
+"tslib@npm:^2.6.2":
+ version: 2.8.1
+ resolution: "tslib@npm:2.8.1"
+ checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
+ languageName: node
+ linkType: hard
+
+"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
+ version: 0.4.0
+ resolution: "type-check@npm:0.4.0"
+ dependencies:
+ prelude-ls: "npm:^1.2.1"
+ checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58
+ languageName: node
+ linkType: hard
+
+"type-detect@npm:4.0.8":
+ version: 4.0.8
+ resolution: "type-detect@npm:4.0.8"
+ checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd
+ languageName: node
+ linkType: hard
+
+"type-fest@npm:^0.21.3":
+ version: 0.21.3
+ resolution: "type-fest@npm:0.21.3"
+ checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8
+ languageName: node
+ linkType: hard
+
+"typedoc@npm:^0.27.4":
+ version: 0.27.7
+ resolution: "typedoc@npm:0.27.7"
+ dependencies:
+ "@gerrit0/mini-shiki": "npm:^1.24.0"
+ lunr: "npm:^2.3.9"
+ markdown-it: "npm:^14.1.0"
+ minimatch: "npm:^9.0.5"
+ yaml: "npm:^2.6.1"
+ peerDependencies:
+ typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x
+ bin:
+ typedoc: bin/typedoc
+ checksum: 10c0/727f7da5255f66d949a524582b5ec9ecfa43caade1ea48efe9305117bd18d5a26c423c788767ee992662eff7bec7ac993673cafe14d6fd206881c604cad2f6ba
+ languageName: node
+ linkType: hard
+
+"typescript-eslint@npm:^8.18.0":
+ version: 8.24.1
+ resolution: "typescript-eslint@npm:8.24.1"
+ dependencies:
+ "@typescript-eslint/eslint-plugin": "npm:8.24.1"
+ "@typescript-eslint/parser": "npm:8.24.1"
+ "@typescript-eslint/utils": "npm:8.24.1"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/5bcb6af12d04777ca04ca9300552e1c7410d640950945d854be41c264fdfe965ce40c0203336e073eb0697567d59043b3096dfed825e76fd7347081e9abf3b16
+ languageName: node
+ linkType: hard
+
+"typescript@npm:~5.7.2":
+ version: 5.7.3
+ resolution: "typescript@npm:5.7.3"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa
+ languageName: node
+ linkType: hard
+
+"typescript@patch:typescript@npm%3A~5.7.2#optional!builtin":
+ version: 5.7.3
+ resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4
+ languageName: node
+ linkType: hard
+
+"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "uc.micro@npm:2.1.0"
+ checksum: 10c0/8862eddb412dda76f15db8ad1c640ccc2f47cdf8252a4a30be908d535602c8d33f9855dfcccb8b8837855c1ce1eaa563f7fa7ebe3c98fd0794351aab9b9c55fa
+ languageName: node
+ linkType: hard
+
+"undici-types@npm:~5.26.4":
+ version: 5.26.5
+ resolution: "undici-types@npm:5.26.5"
+ checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501
+ languageName: node
+ linkType: hard
+
+"undici-types@npm:~6.20.0":
+ version: 6.20.0
+ resolution: "undici-types@npm:6.20.0"
+ checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf
+ languageName: node
+ linkType: hard
+
+"unique-filename@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "unique-filename@npm:4.0.0"
+ dependencies:
+ unique-slug: "npm:^5.0.0"
+ checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc
+ languageName: node
+ linkType: hard
+
+"unique-slug@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unique-slug@npm:5.0.0"
+ dependencies:
+ imurmurhash: "npm:^0.1.4"
+ checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293
+ languageName: node
+ linkType: hard
+
+"universalify@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "universalify@npm:2.0.1"
+ checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a
+ languageName: node
+ linkType: hard
+
+"update-browserslist-db@npm:^1.1.1":
+ version: 1.1.2
+ resolution: "update-browserslist-db@npm:1.1.2"
+ dependencies:
+ escalade: "npm:^3.2.0"
+ picocolors: "npm:^1.1.1"
+ peerDependencies:
+ browserslist: ">= 4.21.0"
+ bin:
+ update-browserslist-db: cli.js
+ checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6
+ languageName: node
+ linkType: hard
+
+"uri-js@npm:^4.2.2":
+ version: 4.4.1
+ resolution: "uri-js@npm:4.4.1"
+ dependencies:
+ punycode: "npm:^2.1.0"
+ checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c
+ languageName: node
+ linkType: hard
+
+"v8-compile-cache-lib@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "v8-compile-cache-lib@npm:3.0.1"
+ checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391
+ languageName: node
+ linkType: hard
+
+"v8-to-istanbul@npm:^9.0.1":
+ version: 9.3.0
+ resolution: "v8-to-istanbul@npm:9.3.0"
+ dependencies:
+ "@jridgewell/trace-mapping": "npm:^0.3.12"
+ "@types/istanbul-lib-coverage": "npm:^2.0.1"
+ convert-source-map: "npm:^2.0.0"
+ checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23
+ languageName: node
+ linkType: hard
+
+"walker@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "walker@npm:1.0.8"
+ dependencies:
+ makeerror: "npm:1.0.12"
+ checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e
+ languageName: node
+ linkType: hard
+
+"which@npm:^2.0.1":
+ version: 2.0.2
+ resolution: "which@npm:2.0.2"
+ dependencies:
+ isexe: "npm:^2.0.0"
+ bin:
+ node-which: ./bin/node-which
+ checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f
+ languageName: node
+ linkType: hard
+
+"which@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "which@npm:5.0.0"
+ dependencies:
+ isexe: "npm:^3.1.1"
+ bin:
+ node-which: bin/which.js
+ checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b
+ languageName: node
+ linkType: hard
+
+"word-wrap@npm:^1.2.5":
+ version: 1.2.5
+ resolution: "word-wrap@npm:1.2.5"
+ checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20
+ languageName: node
+ linkType: hard
+
+"wrap-ansi@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "wrap-ansi@npm:7.0.0"
+ dependencies:
+ ansi-styles: "npm:^4.0.0"
+ string-width: "npm:^4.1.0"
+ strip-ansi: "npm:^6.0.0"
+ checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da
+ languageName: node
+ linkType: hard
+
+"write-file-atomic@npm:^4.0.2":
+ version: 4.0.2
+ resolution: "write-file-atomic@npm:4.0.2"
+ dependencies:
+ imurmurhash: "npm:^0.1.4"
+ signal-exit: "npm:^3.0.7"
+ checksum: 10c0/a2c282c95ef5d8e1c27b335ae897b5eca00e85590d92a3fd69a437919b7b93ff36a69ea04145da55829d2164e724bc62202cdb5f4b208b425aba0807889375c7
+ languageName: node
+ linkType: hard
+
+"y18n@npm:^5.0.5":
+ version: 5.0.8
+ resolution: "y18n@npm:5.0.8"
+ checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249
+ languageName: node
+ linkType: hard
+
+"yallist@npm:^3.0.2":
+ version: 3.1.1
+ resolution: "yallist@npm:3.1.1"
+ checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1
+ languageName: node
+ linkType: hard
+
+"yallist@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "yallist@npm:4.0.0"
+ checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a
+ languageName: node
+ linkType: hard
+
+"yallist@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "yallist@npm:5.0.0"
+ checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416
+ languageName: node
+ linkType: hard
+
+"yaml@npm:1.10.2":
+ version: 1.10.2
+ resolution: "yaml@npm:1.10.2"
+ checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f
+ languageName: node
+ linkType: hard
+
+"yaml@npm:^2.6.1":
+ version: 2.7.0
+ resolution: "yaml@npm:2.7.0"
+ bin:
+ yaml: bin.mjs
+ checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9
+ languageName: node
+ linkType: hard
+
+"yargs-parser@npm:^21.1.1":
+ version: 21.1.1
+ resolution: "yargs-parser@npm:21.1.1"
+ checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2
+ languageName: node
+ linkType: hard
+
+"yargs@npm:^17.3.1":
+ version: 17.7.2
+ resolution: "yargs@npm:17.7.2"
+ dependencies:
+ cliui: "npm:^8.0.1"
+ escalade: "npm:^3.1.1"
+ get-caller-file: "npm:^2.0.5"
+ require-directory: "npm:^2.1.1"
+ string-width: "npm:^4.2.3"
+ y18n: "npm:^5.0.5"
+ yargs-parser: "npm:^21.1.1"
+ checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05
+ languageName: node
+ linkType: hard
+
+"yn@npm:3.1.1":
+ version: 3.1.1
+ resolution: "yn@npm:3.1.1"
+ checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443
+ languageName: node
+ linkType: hard
+
+"yocto-queue@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "yocto-queue@npm:0.1.0"
+ checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f
+ languageName: node
+ linkType: hard