From 4261cbad6ba8b8b215629e9fc69541bbef4a11b0 Mon Sep 17 00:00:00 2001 From: Masashi Tomooka Date: Fri, 4 Aug 2023 20:31:54 +0900 Subject: [PATCH] feat: deploy-time build for SOCI indices (#7) * feat: deploy-time build for SOCI indices * Update README.md --- .projen/tasks.json | 2 +- .projenrc.js | 2 +- API.md | 174 + README.md | 20 +- example/example-image/Dockerfile | 5 + example/index.ts | 18 +- lambda/nodejs-build/index.ts | 132 - lambda/nodejs-build/package-lock.json | 2423 --------- .../.npmignore | 0 lambda/trigger-codebuild/index.ts | 173 + lambda/trigger-codebuild/package-lock.json | 2535 +++++++++ .../package.json | 0 src/index.ts | 1 + src/nodejs-build.ts | 15 +- src/singleton-project.ts | 31 + src/soci-index-build.ts | 126 + src/types.ts | 12 +- test/integ.soci-index-build.ts | 39 + .../NodejsBuildIntegTest.template.json | 19 +- .../index.js | 4727 ----------------- .../index.js | 121 - .../index.js | 164 + .../nodejs-build.integ.snapshot/manifest.json | 24 +- test/nodejs-build.integ.snapshot/tree.json | 20 +- .../SociIndexBuildIntegTest.template.json | 360 ++ ...aultTestDeployAssert12909640.template.json | 1 + .../Dockerfile | 5 + .../Dockerfile | 5 + .../index.js | 164 + test/soci-index-build.integ.snapshot/cdk.out | 1 + .../integ.json | 12 + .../manifest.json | 139 + .../soci-index-build.integ.snapshot/tree.json | 705 +++ 33 files changed, 4725 insertions(+), 7450 deletions(-) create mode 100644 example/example-image/Dockerfile delete mode 100644 lambda/nodejs-build/index.ts delete mode 100644 lambda/nodejs-build/package-lock.json rename lambda/{nodejs-build => trigger-codebuild}/.npmignore (100%) create mode 100644 lambda/trigger-codebuild/index.ts create mode 100644 lambda/trigger-codebuild/package-lock.json rename lambda/{nodejs-build => trigger-codebuild}/package.json (100%) create mode 100644 src/singleton-project.ts create mode 100644 src/soci-index-build.ts create mode 100644 test/integ.soci-index-build.ts delete mode 100644 test/nodejs-build.integ.snapshot/asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/index.js delete mode 100644 test/nodejs-build.integ.snapshot/asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/index.js create mode 100644 test/nodejs-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js create mode 100644 test/soci-index-build.integ.snapshot/SociIndexBuildIntegTest.template.json create mode 100644 test/soci-index-build.integ.snapshot/TestDefaultTestDeployAssert12909640.template.json create mode 100644 test/soci-index-build.integ.snapshot/asset.3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2/Dockerfile create mode 100644 test/soci-index-build.integ.snapshot/asset.47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2/Dockerfile create mode 100644 test/soci-index-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js create mode 100644 test/soci-index-build.integ.snapshot/cdk.out create mode 100644 test/soci-index-build.integ.snapshot/integ.json create mode 100644 test/soci-index-build.integ.snapshot/manifest.json create mode 100644 test/soci-index-build.integ.snapshot/tree.json diff --git a/.projen/tasks.json b/.projen/tasks.json index 80f59bc..319706c 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -88,7 +88,7 @@ "steps": [ { "exec": "npm ci && npm run build", - "cwd": "lambda/nodejs-build" + "cwd": "lambda/trigger-codebuild" }, { "exec": "jsii --silence-warnings=reserved-word" diff --git a/.projenrc.js b/.projenrc.js index 76ca5ae..b8c22e6 100644 --- a/.projenrc.js +++ b/.projenrc.js @@ -22,7 +22,7 @@ const project = new awscdk.AwsCdkConstructLibrary({ }); // Bundle custom resource handler Lambda code project.projectBuild.compileTask.prependExec('npm ci && npm run build', { - cwd: 'lambda/nodejs-build', + cwd: 'lambda/trigger-codebuild', }); // Run integ-test project.projectBuild.testTask.exec('yarn tsc -p tsconfig.dev.json && yarn integ-runner'); diff --git a/API.md b/API.md index dc854bd..b8ecee6 100644 --- a/API.md +++ b/API.md @@ -101,6 +101,134 @@ The tree node. --- +### SociIndexBuild + +#### Initializers + +```typescript +import { SociIndexBuild } from 'deploy-time-build' + +new SociIndexBuild(scope: Construct, id: string, props: SociIndexBuildProps) +``` + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| scope | constructs.Construct | *No description.* | +| id | string | *No description.* | +| props | SociIndexBuildProps | *No description.* | + +--- + +##### `scope`Required + +- *Type:* constructs.Construct + +--- + +##### `id`Required + +- *Type:* string + +--- + +##### `props`Required + +- *Type:* SociIndexBuildProps + +--- + +#### Methods + +| **Name** | **Description** | +| --- | --- | +| toString | Returns a string representation of this construct. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| --- | --- | +| isConstruct | Checks if `x` is a construct. | +| fromImageAsset | A utility method to create a SociIndexBuild construct from a DockerImageAsset instance. | + +--- + +##### ~~`isConstruct`~~ + +```typescript +import { SociIndexBuild } from 'deploy-time-build' + +SociIndexBuild.isConstruct(x: any) +``` + +Checks if `x` is a construct. + +###### `x`Required + +- *Type:* any + +Any object. + +--- + +##### `fromImageAsset` + +```typescript +import { SociIndexBuild } from 'deploy-time-build' + +SociIndexBuild.fromImageAsset(scope: Construct, id: string, imageAsset: DockerImageAsset) +``` + +A utility method to create a SociIndexBuild construct from a DockerImageAsset instance. + +###### `scope`Required + +- *Type:* constructs.Construct + +--- + +###### `id`Required + +- *Type:* string + +--- + +###### `imageAsset`Required + +- *Type:* aws-cdk-lib.aws_ecr_assets.DockerImageAsset + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| node | constructs.Node | The tree node. | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- *Type:* constructs.Node + +The tree node. + +--- + + ## Structs ### AssetConfig @@ -433,5 +561,51 @@ Relative path from the build directory to the directory where build commands run --- +### SociIndexBuildProps + +#### Initializer + +```typescript +import { SociIndexBuildProps } from 'deploy-time-build' + +const sociIndexBuildProps: SociIndexBuildProps = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| imageTag | string | The tag of the container image you want to build index for. | +| repository | aws-cdk-lib.aws_ecr.IRepository | The ECR repository your container image is stored. | + +--- + +##### `imageTag`Required + +```typescript +public readonly imageTag: string; +``` + +- *Type:* string + +The tag of the container image you want to build index for. + +--- + +##### `repository`Required + +```typescript +public readonly repository: IRepository; +``` + +- *Type:* aws-cdk-lib.aws_ecr.IRepository + +The ECR repository your container image is stored. + +You can only specify a repository in the same environment (account/region). +The index artifact will be uploaded to this repository. + +--- + diff --git a/README.md b/README.md index 77024a2..253d244 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ Install from npm: ```sh npm i deploy-time-build ``` - -Then write CDK code as below: +### Build Node.js apps +Use the following code to build Node.js apps like React frontend: ```ts import { NodejsBuild } from 'deploy-time-build'; @@ -70,6 +70,22 @@ You can also override the path where assets are extracted by `extractPath` prope Please also check [the example directory](./example/) for a complete example. +### Build SOCI index for a container image +[Seekable OCI (SOCI)](https://docs.aws.amazon.com/AmazonECS/latest/userguide/container-considerations.html) is a way to help start tasks faster for Amazon ECS tasks on Fargate 1.4.0. You can build and push a SOCI index to use the feature by the following CDK code: + +```ts +import { SociIndexBuild } from 'deploy-time-build; + +const asset = new DockerImageAsset(this, 'Image', { directory: 'example-image' }); +new SociIndexBuild(this, 'Index', { imageTag: asset.assetHash, repository: asset.repository }); +// or using a utility method +SociIndexBuild.fromImageAsset(this, 'Index', asset); + +// Use the asset for ECS Fargate tasks +import { AssetImage } from 'aws-cdk-lib/aws-ecs'; +const assetImage = AssetImage.fromDockerImageAsset(asset); +``` + ## Motivation - why do we need this construct? Previously, there are a few different ways to deploy frontend applications from CDK (1 and 2 below). But none is perfect with different pros and cons. This construct adds another option to deploy frontend apps. diff --git a/example/example-image/Dockerfile b/example/example-image/Dockerfile new file mode 100644 index 0000000..c407d6b --- /dev/null +++ b/example/example-image/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx:1.25.1 +# create dummy file to change the size of a image +ARG DUMMY_FILE_SIZE_MB="10" +# RUN fallocate -l ${DUMMY_FILE_SIZE_MB} dummy.img +RUN dd if=/dev/zero of=dummy.img bs=1M count=${DUMMY_FILE_SIZE_MB} diff --git a/example/index.ts b/example/index.ts index 516c876..4faf64b 100644 --- a/example/index.ts +++ b/example/index.ts @@ -1,11 +1,12 @@ import { Stack, StackProps, App, RemovalPolicy, CfnOutput } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { MockIntegration, RestApi } from 'aws-cdk-lib/aws-apigateway'; -import { NodejsBuild } from '../src/nodejs-build'; +import { NodejsBuild, SociIndexBuild } from '../src/'; import { BlockPublicAccess, Bucket, BucketEncryption } from 'aws-cdk-lib/aws-s3'; import { OriginAccessIdentity, CloudFrontWebDistribution } from 'aws-cdk-lib/aws-cloudfront'; +import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets'; -class TestStack extends Stack { +class NodejsTestStack extends Stack { constructor(scope: Construct, id: string, props: StackProps = {}) { super(scope, id, props); @@ -74,11 +75,22 @@ class TestStack extends Stack { } } +class SociIndexTestStack extends Stack { + constructor(scope: Construct, id: string, props: StackProps = {}) { + super(scope, id, props); + + const asset = new DockerImageAsset(this, 'Image', { directory: 'example-image' }); + + new SociIndexBuild(this, 'Index', { imageTag: asset.assetHash, repository: asset.repository }); + } +} + class TestApp extends App { constructor() { super(); - new TestStack(this, 'TestStack'); + new NodejsTestStack(this, 'NodejsTestStack'); + new SociIndexTestStack(this, 'SociIndexTestStack'); } } diff --git a/lambda/nodejs-build/index.ts b/lambda/nodejs-build/index.ts deleted file mode 100644 index 4e06d30..0000000 --- a/lambda/nodejs-build/index.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { BatchGetBuildsCommand, CodeBuildClient, StartBuildCommand } from '@aws-sdk/client-codebuild'; -import type { ResourceProperties } from '../../src/types'; - -const cb = new CodeBuildClient({}); - -type Event = { - RequestType: 'Create' | 'Update' | 'Delete'; - ResponseURL: string; - StackId: string; - RequestId: string; - ResourceType: string; - LogicalResourceId: string; - ResourceProperties: ResourceProperties; -}; - -export const handler = async (event: Event, context: any) => { - console.log(JSON.stringify(event)); - - try { - if (event.RequestType == 'Create' || event.RequestType == 'Update') { - const props = event.ResourceProperties; - - // start code build project - const build = await cb.send( - new StartBuildCommand({ - projectName: props.codeBuildProjectName, - environmentVariablesOverride: [ - { - name: 'input', - value: JSON.stringify( - props.sources.map((source) => ({ - assetUrl: `s3://${source.sourceBucketName}/${source.sourceObjectKey}`, - extractPath: source.extractPath, - commands: (source.commands ?? []).join(' && '), - })) - ), - }, - { - name: 'buildCommands', - value: props.buildCommands.join(' && '), - }, - { - name: 'destinationBucketName', - value: props.destinationBucketName, - }, - { - name: 'destinationObjectKey', - value: props.destinationObjectKey, - }, - { - name: 'workingDirectory', - value: props.workingDirectory, - }, - { - name: 'outputSourceDirectory', - value: props.outputSourceDirectory, - }, - { - name: 'projectName', - value: props.codeBuildProjectName, - }, - { - name: 'responseURL', - value: event.ResponseURL, - }, - { - name: 'stackId', - value: event.StackId, - }, - { - name: 'requestId', - value: event.RequestId, - }, - { - name: 'logicalResourceId', - value: event.LogicalResourceId, - }, - ...Object.entries(props.environment ?? {}).map(([name, value]) => ({ - name, - value, - })), - ], - }) - ); - - // Sometimes CodeBuild build fails before running buildspec, without calling the CFn callback. - // We can poll the status of a build for a few minutes and sendStatus if such errors are detected. - // if (build.build?.id == null) { - // throw new Error('build id is null'); - // } - - // for (let i=0; i< 20; i++) { - // const res = await cb.send(new BatchGetBuildsCommand({ ids: [build.build.id] })); - // const status = res.builds?.[0].buildStatus; - // if (status == null) { - // throw new Error('build status is null'); - // } - - // await new Promise((resolve) => setTimeout(resolve, 5000)); - // } - } else { - // Do nothing on a DELETE event. - await sendStatus('SUCCESS', event, context); - } - } catch (e) { - console.log(e); - const err = e as Error; - await sendStatus('FAILED', event, context, err.message); - } -}; - -const sendStatus = async (status: 'SUCCESS' | 'FAILED', event: Event, context: any, reason?: string) => { - const responseBody = JSON.stringify({ - Status: status, - Reason: reason ?? 'See the details in CloudWatch Log Stream: ' + context.logStreamName, - PhysicalResourceId: context.logStreamName, - StackId: event.StackId, - RequestId: event.RequestId, - LogicalResourceId: event.LogicalResourceId, - NoEcho: false, - Data: {}, //responseData - }); - - await fetch(event.ResponseURL, { - method: 'PUT', - body: responseBody, - headers: { - 'Content-Type': '', - 'Content-Length': responseBody.length.toString(), - }, - }); -}; diff --git a/lambda/nodejs-build/package-lock.json b/lambda/nodejs-build/package-lock.json deleted file mode 100644 index bab825c..0000000 --- a/lambda/nodejs-build/package-lock.json +++ /dev/null @@ -1,2423 +0,0 @@ -{ - "name": "lambda", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "lambda", - "version": "1.0.0", - "dependencies": { - "@aws-sdk/client-codebuild": "^3.321.1" - }, - "devDependencies": { - "@types/aws-lambda": "^8.10.95", - "@types/node": "^18.16.3", - "esbuild": "^0.14.39" - } - }, - "node_modules/@aws-sdk/client-codebuild": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.321.1.tgz", - "integrity": "sha512-7CQKL9r0moamfD/7we6v5PJNcFahV9M1y/jkvPNkb+aIfbIkBV7EWi7exlUNwVt/ju+MwpGwdixX1QczHy1+3Q==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.321.1", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.321.1", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/abort-controller": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.310.0.tgz", - "integrity": "sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/client-sso": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.321.1.tgz", - "integrity": "sha512-ecoT4tBGtRJR5G7oLBTMXZmgZZlff1amhSdKPEtkWxv6kWc8VPb5rRuRgVPsDR9HuesI6ZVlODptvGtnfkIJwA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.321.1.tgz", - "integrity": "sha512-PBVfHQbyrsfzbnO6u9d9Sik8JlXGLhHj3zLd87iBkYXBdHwD5NuvwWu7OtjUtrHjP4SfzodVwfjmTbDAFqbtzw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/client-sts": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.321.1.tgz", - "integrity": "sha512-AB+N4a1TVEKl9Sd5O2TxTprEZp7Va6zPZLMraFAYMdmJVBmCmmwyBs7ygju685DpQ1dos5PRsKCRcossyY5pDQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.321.1", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-sdk-sts": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "fast-xml-parser": "4.1.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/config-resolver": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz", - "integrity": "sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-config-provider": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz", - "integrity": "sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==", - "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz", - "integrity": "sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.321.1.tgz", - "integrity": "sha512-prndSVQhiikNaI40bYnM2Q8PkC35FCwhbQnBk6KXNvdtfo9RqatMC639F+6oryb3BuMy++Ij4Yoi8WnPBs5Sww==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.321.1", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.321.1.tgz", - "integrity": "sha512-5B1waOwSvY2JMLGRebo7IUqnTaGoCnby9cRbG/dhi7Ke97M3V8380S9THDJ/bktjL8zHEVfBVZy7HhXHzhSjEg==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-ini": "3.321.1", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.321.1", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz", - "integrity": "sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==", - "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.321.1.tgz", - "integrity": "sha512-kg0rc1OacJFgAvmZj0TOu+BSc+yRdnC5dO/RAag3XU6+hlQI5/C080RQp9Qj6V7ga0HtAJMRwJcUlCPA3RJPug==", - "dependencies": { - "@aws-sdk/client-sso": "3.321.1", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/token-providers": "3.321.1", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz", - "integrity": "sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==", - "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz", - "integrity": "sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==", - "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/hash-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz", - "integrity": "sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/invalid-dependency": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz", - "integrity": "sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-content-length": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz", - "integrity": "sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz", - "integrity": "sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==", - "dependencies": { - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz", - "integrity": "sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==", - "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-logger": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz", - "integrity": "sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz", - "integrity": "sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz", - "integrity": "sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==", - "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/service-error-classification": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz", - "integrity": "sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-serde": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz", - "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-signing": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz", - "integrity": "sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==", - "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-stack": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz", - "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.319.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.319.0.tgz", - "integrity": "sha512-ytaLx2dlR5AdMSne6FuDCISVg8hjyKj+cHU20b2CRA/E/z+XXrLrssp4JrCgizRKPPUep0psMIa22Zd6osTT5Q==", - "dependencies": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-endpoints": "3.319.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/node-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz", - "integrity": "sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==", - "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/node-http-handler": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.321.1.tgz", - "integrity": "sha512-DdQBrtFFDNtzphJIN3s93Vf+qd9LHSzH6WTQRrWoXhTDMHDzSI2Cn+c5KWfk89Nggp/n3+OTwUPQeCiBT5EBuw==", - "dependencies": { - "@aws-sdk/abort-controller": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/property-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz", - "integrity": "sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/protocol-http": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz", - "integrity": "sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/querystring-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz", - "integrity": "sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/querystring-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz", - "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/service-error-classification": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz", - "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz", - "integrity": "sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/signature-v4": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz", - "integrity": "sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/smithy-client": { - "version": "3.316.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.316.0.tgz", - "integrity": "sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw==", - "dependencies": { - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/token-providers": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.321.1.tgz", - "integrity": "sha512-I1sXS4qXirSvgvrOIPf+e1D7GvC83DdeyMxHZvuhHgeMCqDAzToS8OLxOX0enN9xZRHWAQYja8xyeGbDL2I0Zw==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.321.1", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/types": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz", - "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/url-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz", - "integrity": "sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==", - "dependencies": { - "@aws-sdk/querystring-parser": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", - "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-body-length-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", - "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", - "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.316.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.316.0.tgz", - "integrity": "sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w==", - "dependencies": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.316.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.316.0.tgz", - "integrity": "sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ==", - "dependencies": { - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-endpoints": { - "version": "3.319.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.319.0.tgz", - "integrity": "sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", - "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-middleware": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz", - "integrity": "sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz", - "integrity": "sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==", - "dependencies": { - "@aws-sdk/service-error-classification": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-uri-escape": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", - "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz", - "integrity": "sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==", - "dependencies": { - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz", - "integrity": "sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/client-codebuild/node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", - "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-utf8/node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8/node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.95", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz", - "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.16.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", - "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", - "dev": true - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - } - }, - "dependencies": { - "@aws-sdk/client-codebuild": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.321.1.tgz", - "integrity": "sha512-7CQKL9r0moamfD/7we6v5PJNcFahV9M1y/jkvPNkb+aIfbIkBV7EWi7exlUNwVt/ju+MwpGwdixX1QczHy1+3Q==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.321.1", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.321.1", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "requires": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-sdk/abort-controller": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.310.0.tgz", - "integrity": "sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.321.1.tgz", - "integrity": "sha512-ecoT4tBGtRJR5G7oLBTMXZmgZZlff1amhSdKPEtkWxv6kWc8VPb5rRuRgVPsDR9HuesI6ZVlODptvGtnfkIJwA==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.321.1.tgz", - "integrity": "sha512-PBVfHQbyrsfzbnO6u9d9Sik8JlXGLhHj3zLd87iBkYXBdHwD5NuvwWu7OtjUtrHjP4SfzodVwfjmTbDAFqbtzw==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sts": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.321.1.tgz", - "integrity": "sha512-AB+N4a1TVEKl9Sd5O2TxTprEZp7Va6zPZLMraFAYMdmJVBmCmmwyBs7ygju685DpQ1dos5PRsKCRcossyY5pDQ==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-node": "3.321.1", - "@aws-sdk/fetch-http-handler": "3.310.0", - "@aws-sdk/hash-node": "3.310.0", - "@aws-sdk/invalid-dependency": "3.310.0", - "@aws-sdk/middleware-content-length": "3.310.0", - "@aws-sdk/middleware-endpoint": "3.310.0", - "@aws-sdk/middleware-host-header": "3.310.0", - "@aws-sdk/middleware-logger": "3.310.0", - "@aws-sdk/middleware-recursion-detection": "3.310.0", - "@aws-sdk/middleware-retry": "3.310.0", - "@aws-sdk/middleware-sdk-sts": "3.310.0", - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/middleware-user-agent": "3.319.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/node-http-handler": "3.321.1", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/smithy-client": "3.316.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.316.0", - "@aws-sdk/util-defaults-mode-node": "3.316.0", - "@aws-sdk/util-endpoints": "3.319.0", - "@aws-sdk/util-retry": "3.310.0", - "@aws-sdk/util-user-agent-browser": "3.310.0", - "@aws-sdk/util-user-agent-node": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "fast-xml-parser": "4.1.2", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/config-resolver": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz", - "integrity": "sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==", - "requires": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-config-provider": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz", - "integrity": "sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==", - "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-imds": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz", - "integrity": "sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==", - "requires": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.321.1.tgz", - "integrity": "sha512-prndSVQhiikNaI40bYnM2Q8PkC35FCwhbQnBk6KXNvdtfo9RqatMC639F+6oryb3BuMy++Ij4Yoi8WnPBs5Sww==", - "requires": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.321.1", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.321.1.tgz", - "integrity": "sha512-5B1waOwSvY2JMLGRebo7IUqnTaGoCnby9cRbG/dhi7Ke97M3V8380S9THDJ/bktjL8zHEVfBVZy7HhXHzhSjEg==", - "requires": { - "@aws-sdk/credential-provider-env": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/credential-provider-ini": "3.321.1", - "@aws-sdk/credential-provider-process": "3.310.0", - "@aws-sdk/credential-provider-sso": "3.321.1", - "@aws-sdk/credential-provider-web-identity": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz", - "integrity": "sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==", - "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.321.1.tgz", - "integrity": "sha512-kg0rc1OacJFgAvmZj0TOu+BSc+yRdnC5dO/RAag3XU6+hlQI5/C080RQp9Qj6V7ga0HtAJMRwJcUlCPA3RJPug==", - "requires": { - "@aws-sdk/client-sso": "3.321.1", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/token-providers": "3.321.1", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz", - "integrity": "sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==", - "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/fetch-http-handler": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz", - "integrity": "sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==", - "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-base64": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/hash-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz", - "integrity": "sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==", - "requires": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/invalid-dependency": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz", - "integrity": "sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-content-length": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz", - "integrity": "sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==", - "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-endpoint": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz", - "integrity": "sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==", - "requires": { - "@aws-sdk/middleware-serde": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/url-parser": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz", - "integrity": "sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==", - "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz", - "integrity": "sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz", - "integrity": "sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==", - "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz", - "integrity": "sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==", - "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/service-error-classification": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-retry": "3.310.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - } - }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz", - "integrity": "sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==", - "requires": { - "@aws-sdk/middleware-signing": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-serde": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz", - "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-signing": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz", - "integrity": "sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==", - "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/signature-v4": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-stack": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz", - "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.319.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.319.0.tgz", - "integrity": "sha512-ytaLx2dlR5AdMSne6FuDCISVg8hjyKj+cHU20b2CRA/E/z+XXrLrssp4JrCgizRKPPUep0psMIa22Zd6osTT5Q==", - "requires": { - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-endpoints": "3.319.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/node-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz", - "integrity": "sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==", - "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/node-http-handler": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.321.1.tgz", - "integrity": "sha512-DdQBrtFFDNtzphJIN3s93Vf+qd9LHSzH6WTQRrWoXhTDMHDzSI2Cn+c5KWfk89Nggp/n3+OTwUPQeCiBT5EBuw==", - "requires": { - "@aws-sdk/abort-controller": "3.310.0", - "@aws-sdk/protocol-http": "3.310.0", - "@aws-sdk/querystring-builder": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/property-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz", - "integrity": "sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/protocol-http": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz", - "integrity": "sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/querystring-builder": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz", - "integrity": "sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==", - "requires": { - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/querystring-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz", - "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/service-error-classification": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz", - "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==" - }, - "@aws-sdk/shared-ini-file-loader": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz", - "integrity": "sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/signature-v4": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz", - "integrity": "sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==", - "requires": { - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/types": "3.310.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.310.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/smithy-client": { - "version": "3.316.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.316.0.tgz", - "integrity": "sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw==", - "requires": { - "@aws-sdk/middleware-stack": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/token-providers": { - "version": "3.321.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.321.1.tgz", - "integrity": "sha512-I1sXS4qXirSvgvrOIPf+e1D7GvC83DdeyMxHZvuhHgeMCqDAzToS8OLxOX0enN9xZRHWAQYja8xyeGbDL2I0Zw==", - "requires": { - "@aws-sdk/client-sso-oidc": "3.321.1", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/shared-ini-file-loader": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/types": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz", - "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/url-parser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz", - "integrity": "sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==", - "requires": { - "@aws-sdk/querystring-parser": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", - "requires": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-body-length-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", - "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-body-length-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", - "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "requires": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", - "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-defaults-mode-browser": { - "version": "3.316.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.316.0.tgz", - "integrity": "sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w==", - "requires": { - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-defaults-mode-node": { - "version": "3.316.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.316.0.tgz", - "integrity": "sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ==", - "requires": { - "@aws-sdk/config-resolver": "3.310.0", - "@aws-sdk/credential-provider-imds": "3.310.0", - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/property-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.319.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.319.0.tgz", - "integrity": "sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==", - "requires": { - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-hex-encoding": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", - "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-middleware": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz", - "integrity": "sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-retry": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz", - "integrity": "sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==", - "requires": { - "@aws-sdk/service-error-classification": "3.310.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-uri-escape": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", - "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz", - "integrity": "sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==", - "requires": { - "@aws-sdk/types": "3.310.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz", - "integrity": "sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==", - "requires": { - "@aws-sdk/node-config-provider": "3.310.0", - "@aws-sdk/types": "3.310.0", - "tslib": "^2.5.0" - } - }, - "fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "requires": { - "strnum": "^1.0.5" - } - } - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-utf8": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", - "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", - "requires": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "requires": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - } - } - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@types/aws-lambda": { - "version": "8.10.95", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz", - "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==", - "dev": true - }, - "@types/node": { - "version": "18.16.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", - "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", - "dev": true - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", - "dev": true, - "requires": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" - } - }, - "esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", - "dev": true, - "optional": true - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } -} diff --git a/lambda/nodejs-build/.npmignore b/lambda/trigger-codebuild/.npmignore similarity index 100% rename from lambda/nodejs-build/.npmignore rename to lambda/trigger-codebuild/.npmignore diff --git a/lambda/trigger-codebuild/index.ts b/lambda/trigger-codebuild/index.ts new file mode 100644 index 0000000..9a80f43 --- /dev/null +++ b/lambda/trigger-codebuild/index.ts @@ -0,0 +1,173 @@ +import { BatchGetBuildsCommand, CodeBuildClient, StartBuildCommand } from '@aws-sdk/client-codebuild'; +import type { ResourceProperties } from '../../src/types'; + +const cb = new CodeBuildClient({}); + +type Event = { + RequestType: 'Create' | 'Update' | 'Delete'; + ResponseURL: string; + StackId: string; + RequestId: string; + ResourceType: string; + LogicalResourceId: string; + ResourceProperties: ResourceProperties; +}; + +export const handler = async (event: Event, context: any) => { + console.log(JSON.stringify(event)); + + try { + if (event.RequestType == 'Create' || event.RequestType == 'Update') { + const props = event.ResourceProperties; + + let command: StartBuildCommand; + switch (props.type) { + case 'NodejsBuild': + command = new StartBuildCommand({ + projectName: props.codeBuildProjectName, + environmentVariablesOverride: [ + { + name: 'input', + value: JSON.stringify( + props.sources.map((source) => ({ + assetUrl: `s3://${source.sourceBucketName}/${source.sourceObjectKey}`, + extractPath: source.extractPath, + commands: (source.commands ?? []).join(' && '), + })) + ), + }, + { + name: 'buildCommands', + value: props.buildCommands.join(' && '), + }, + { + name: 'destinationBucketName', + value: props.destinationBucketName, + }, + { + name: 'destinationObjectKey', + value: props.destinationObjectKey, + }, + { + name: 'workingDirectory', + value: props.workingDirectory, + }, + { + name: 'outputSourceDirectory', + value: props.outputSourceDirectory, + }, + { + name: 'projectName', + value: props.codeBuildProjectName, + }, + { + name: 'responseURL', + value: event.ResponseURL, + }, + { + name: 'stackId', + value: event.StackId, + }, + { + name: 'requestId', + value: event.RequestId, + }, + { + name: 'logicalResourceId', + value: event.LogicalResourceId, + }, + ...Object.entries(props.environment ?? {}).map(([name, value]) => ({ + name, + value, + })), + ], + }); + break; + case 'SociIndexBuild': + command = new StartBuildCommand({ + projectName: props.codeBuildProjectName, + environmentVariablesOverride: [ + { + name: 'repositoryName', + value: props.repositoryName, + }, + { + name: 'imageTag', + value: props.imageTag, + }, + { + name: 'projectName', + value: props.codeBuildProjectName, + }, + { + name: 'responseURL', + value: event.ResponseURL, + }, + { + name: 'stackId', + value: event.StackId, + }, + { + name: 'requestId', + value: event.RequestId, + }, + { + name: 'logicalResourceId', + value: event.LogicalResourceId, + }, + ], + }); + break; + default: + throw new Error(`invalid event type ${props}}`); + } + // start code build project + const build = await cb.send(command); + + // Sometimes CodeBuild build fails before running buildspec, without calling the CFn callback. + // We can poll the status of a build for a few minutes and sendStatus if such errors are detected. + // if (build.build?.id == null) { + // throw new Error('build id is null'); + // } + + // for (let i=0; i< 20; i++) { + // const res = await cb.send(new BatchGetBuildsCommand({ ids: [build.build.id] })); + // const status = res.builds?.[0].buildStatus; + // if (status == null) { + // throw new Error('build status is null'); + // } + + // await new Promise((resolve) => setTimeout(resolve, 5000)); + // } + } else { + // Do nothing on a DELETE event. + await sendStatus('SUCCESS', event, context); + } + } catch (e) { + console.log(e); + const err = e as Error; + await sendStatus('FAILED', event, context, err.message); + } +}; + +const sendStatus = async (status: 'SUCCESS' | 'FAILED', event: Event, context: any, reason?: string) => { + const responseBody = JSON.stringify({ + Status: status, + Reason: reason ?? 'See the details in CloudWatch Log Stream: ' + context.logStreamName, + PhysicalResourceId: context.logStreamName, + StackId: event.StackId, + RequestId: event.RequestId, + LogicalResourceId: event.LogicalResourceId, + NoEcho: false, + Data: {}, //responseData + }); + + await fetch(event.ResponseURL, { + method: 'PUT', + body: responseBody, + headers: { + 'Content-Type': '', + 'Content-Length': responseBody.length.toString(), + }, + }); +}; diff --git a/lambda/trigger-codebuild/package-lock.json b/lambda/trigger-codebuild/package-lock.json new file mode 100644 index 0000000..e1d23de --- /dev/null +++ b/lambda/trigger-codebuild/package-lock.json @@ -0,0 +1,2535 @@ +{ + "name": "lambda", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "lambda", + "version": "1.0.0", + "dependencies": { + "@aws-sdk/client-codebuild": "^3.321.1" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.95", + "@types/node": "^18.16.3", + "esbuild": "^0.14.39" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-codebuild": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.382.0.tgz", + "integrity": "sha512-hRqIdhgBpD9ZjWvsAlYenW6h84OiwW3aMlHklV+O8AAzHh4y4tY3ohhtLGvLCh2wt5Pw5HEL2/B5w7/Z/qMCMw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.382.0", + "@aws-sdk/credential-provider-node": "3.382.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-signing": "3.379.1", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.382.0.tgz", + "integrity": "sha512-ge11t4hJllOF8pBNF0p1X52lLqUsLGAoey24fvk3fyvvczeLpegGYh2kdLG0iwFTDgRxaUqK+kboH5Wy9ux/pw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.382.0.tgz", + "integrity": "sha512-hTfvB1ftbrqaz7qiEkmRobzUQwG34oZlByobn8Frdr5ZQbJk969bX6evQAPyKlJEr26+kL9TnaX+rbLR/+gwHQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.382.0.tgz", + "integrity": "sha512-G5wgahrOqmrljjyLVGASIZUXIIdalbCo0z4PuFHdb2R2CVfwO8renfgrmk4brT9tIxIfen5bRA7ftXMe7yrgRA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.382.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-sdk-sts": "3.379.1", + "@aws-sdk/middleware-signing": "3.379.1", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.378.0.tgz", + "integrity": "sha512-B2OVdO9kBClDwGgWTBLAQwFV8qYTYGyVujg++1FZFSFMt8ORFdZ5fNpErvJtiSjYiOOQMzyBeSNhKyYNXCiJjQ==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.382.0.tgz", + "integrity": "sha512-31pi44WWri2WQmagqptUv7x3Nq8pQ6H06OCQx5goEm77SosSdwQwyBPrS9Pg0yI9aljFAxF+rZ75degsCorbQg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.378.0", + "@aws-sdk/credential-provider-process": "3.378.0", + "@aws-sdk/credential-provider-sso": "3.382.0", + "@aws-sdk/credential-provider-web-identity": "3.378.0", + "@aws-sdk/types": "3.378.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.382.0.tgz", + "integrity": "sha512-q6AWCCb0E0cH/Y5Dtln0QssbCBXDbV4PoTV3EdRuGoJcHyNfHJ8X0mqcc7k44wG4Piazu+ufZThvn43W7W9a4g==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.378.0", + "@aws-sdk/credential-provider-ini": "3.382.0", + "@aws-sdk/credential-provider-process": "3.378.0", + "@aws-sdk/credential-provider-sso": "3.382.0", + "@aws-sdk/credential-provider-web-identity": "3.378.0", + "@aws-sdk/types": "3.378.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.378.0.tgz", + "integrity": "sha512-KFTIy7u+wXj3eDua4rgS0tODzMnXtXhAm1RxzCW9FL5JLBBrd82ymCj1Dp72217Sw5Do6NjCnDTTNkCHZMA77w==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.382.0.tgz", + "integrity": "sha512-tKCQKqxnAHeRD7pQNmDmLWwC7pt5koo6yiQTVQ382U+8xx7BNsApE1zdC4LrtrVN1FYqVbw5kXjYFtSCtaUxGA==", + "dependencies": { + "@aws-sdk/client-sso": "3.382.0", + "@aws-sdk/token-providers": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.378.0.tgz", + "integrity": "sha512-GWjydOszhc4xDF8xuPtBvboglXQr0gwCW1oHAvmLcOT38+Hd6qnKywnMSeoXYRPgoKfF9TkWQgW1jxplzCG0UA==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.379.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.379.1.tgz", + "integrity": "sha512-LI4KpAFWNWVr2aH2vRVblr0Y8tvDz23lj8LOmbDmCrzd5M21nxuocI/8nEAQj55LiTIf9Zs+dHCdsyegnFXdrA==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.378.0.tgz", + "integrity": "sha512-l1DyaDLm3KeBMNMuANI3scWh8Xvu248x+vw6Z7ExWOhGXFmQ1MW7YvASg/SdxWkhlF9HmkkTif1LdMB22x6QDA==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.378.0.tgz", + "integrity": "sha512-mUMfHAz0oGNIWiTZHTVJb+I515Hqs2zx1j36Le4MMiiaMkPW1SRUF1FIwGuc1wh6E8jB5q+XfEMriDjRi4TZRA==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.379.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.379.1.tgz", + "integrity": "sha512-SK3gSyT0XbLiY12+AjLFYL9YngxOXHnZF3Z33Cdd4a+AUYrVBV7JBEEGD1Nlwrcmko+3XgaKlmgUaR5s91MYvg==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.379.1", + "@aws-sdk/types": "3.378.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.379.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.379.1.tgz", + "integrity": "sha512-kBk2ZUvR84EM4fICjr8K+Ykpf8SI1UzzPp2/UVYZ0X+4H/ZCjfSqohGRwHykMqeplne9qHSL7/rGJs1H3l3gPg==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.382.0.tgz", + "integrity": "sha512-LFRW1jmXOrOAd3911ktn6oaYmuurNnulbdRMOUdwz99GGdLVFipQhOi9idKswb8IOhPa4jEVQt25Kcv7ctvu0A==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.382.0.tgz", + "integrity": "sha512-axn4IyPpHdkXi8G06KCB3tPz79DipZFFH9N9YVDpLMnDYTdfX36HGdYzINaQc+z+XPbEpa1ZpoIzWScHRjFjdg==", + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.378.0.tgz", + "integrity": "sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.382.0.tgz", + "integrity": "sha512-flajPyjmjNG67fXk7l4GoTB/7J11VBqtFZXuuAZKhKU07Ia3IQupsFqNf5lV8D44ZgjnKH0fTGnv3dUALjW7Wg==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.378.0.tgz", + "integrity": "sha512-FSCpagzftK1W+m7Ar6lpX7/Gr9y5P56nhFYz8U4EYQ4PkufS6czWX9YW+/FA5OYV0vlQ/SvPqMnzoHIPUNhZrQ==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/types": "^2.0.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.378.0.tgz", + "integrity": "sha512-IdwVJV0E96MkJeFte4dlWqvB+oiqCiZ5lOlheY3W9NynTuuX0GGYNC8Y9yIsV8Oava1+ujpJq0ww6qXdYxmO4A==", + "dependencies": { + "@aws-sdk/types": "3.378.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.1.tgz", + "integrity": "sha512-0s7XjIbsTwZyUW9OwXQ8J6x1UiA1TNCh60Vaw56nHahL7kUZsLhmTlWiaxfLkFtO2Utkj8YewcpHTYpxaTzO+w==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.1.tgz", + "integrity": "sha512-l83Pm7hV+8CBQOCmBRopWDtF+CURUJol7NsuPYvimiDhkC2F8Ba9T1imSFE+pD1UIJ9jlsDPAnZfPJT5cjnuEw==", + "dependencies": { + "@smithy/types": "^2.0.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.1.tgz", + "integrity": "sha512-8VxriuRINNEfVZjEFKBY75y9ZWAx73DZ5K/u+3LmB6r8WR2h3NaFxFKMlwlq0uzNdGhD1ouKBn9XWEGYHKiPLw==", + "dependencies": { + "@smithy/node-config-provider": "^2.0.1", + "@smithy/property-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.1.tgz", + "integrity": "sha512-/IiNB7gQM2y2ZC/GAWOWDa8+iXfhr1g9Xe5979cQEOdCWDISvrAiv18cn3OtIQUhbYOR3gm7QtCpkq1to2takQ==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.1.tgz", + "integrity": "sha512-/SoU/ClazgcdOxgE4zA7RX8euiELwpsrKCSvulVQvu9zpmqJRyEJn8ZTWYFV17/eHOBdHTs9kqodhNhsNT+cUw==", + "dependencies": { + "@smithy/protocol-http": "^2.0.1", + "@smithy/querystring-builder": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.1.tgz", + "integrity": "sha512-oTKYimQdF4psX54ZonpcIE+MXjMUWFxLCNosjPkJPFQ9whRX0K/PFX/+JZGRQh3zO9RlEOEUIbhy9NO+Wha6hw==", + "dependencies": { + "@smithy/types": "^2.0.2", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.1.tgz", + "integrity": "sha512-2q/Eb0AE662zwyMV+z+TL7deBwcHCgaZZGc0RItamBE8kak3MzCi/EZCNoFWoBfxgQ4jfR12wm8KKsSXhJzJtQ==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.1.tgz", + "integrity": "sha512-IZhRSk5GkVBcrKaqPXddBS2uKhaqwBgaSgbBb1OJyGsKe7SxRFbclWS0LqOR9fKUkDl+3lL8E2ffpo6EQg0igw==", + "dependencies": { + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.1.tgz", + "integrity": "sha512-uz/KI1MBd9WHrrkVFZO4L4Wyv24raf0oR4EsOYEeG5jPJO5U+C7MZGLcMxX8gWERDn1sycBDqmGv8fjUMLxT6w==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.1.tgz", + "integrity": "sha512-NKHF4i0gjSyjO6C0ZyjEpNqzGgIu7s8HOK6oT/1Jqws2Q1GynR1xV8XTUs1gKXeaNRzbzKQRewHHmfPwZjOtHA==", + "dependencies": { + "@smithy/protocol-http": "^2.0.1", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.1.tgz", + "integrity": "sha512-uKxPaC6ItH9ZXdpdqNtf8sda7GcU4SPMp0tomq/5lUg9oiMa/Q7+kD35MUrpKaX3IVXVrwEtkjCU9dogZ/RAUA==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.1.tgz", + "integrity": "sha512-Zoel4CPkKRTQ2XxmozZUfqBYqjPKL53/SvTDhJHj+VBSiJy6MXRav1iDCyFPS92t40Uh+Yi+Km5Ch3hQ+c/zSA==", + "dependencies": { + "@smithy/property-provider": "^2.0.1", + "@smithy/shared-ini-file-loader": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.1.tgz", + "integrity": "sha512-Zv3fxk3p9tsmPT2CKMsbuwbbxnq2gzLDIulxv+yI6aE+02WPYorObbbe9gh7SW3weadMODL1vTfOoJ9yFypDzg==", + "dependencies": { + "@smithy/abort-controller": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/querystring-builder": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.1.tgz", + "integrity": "sha512-pmJRyY9SF6sutWIktIhe+bUdSQDxv/qZ4mYr3/u+u45riTPN7nmRxPo+e4sjWVoM0caKFjRSlj3tf5teRFy0Vg==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.1.tgz", + "integrity": "sha512-mrkMAp0wtaDEIkgRObWYxI1Kun1tm6Iu6rK+X4utb6Ah7Uc3Kk4VIWwK/rBHdYGReiLIrxFCB1rq4a2gyZnSgg==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.1.tgz", + "integrity": "sha512-bp+93WFzx1FojVEIeFPtG0A1pKsFdCUcZvVdZdRlmNooOUrz9Mm9bneRd8hDwAQ37pxiZkCOxopSXXRQN10mYw==", + "dependencies": { + "@smithy/types": "^2.0.2", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.1.tgz", + "integrity": "sha512-h+e7k1z+IvI2sSbUBG9Aq46JsgLl4UqIUl6aigAlRBj+P6ocNXpM6Yn1vMBw5ijtXeZbYpd1YvCxwDgdw3jhmg==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.1.tgz", + "integrity": "sha512-a463YiZrPGvM+F336rIF8pLfQsHAdCRAn/BiI/EWzg5xLoxbC7GSxIgliDDXrOu0z8gT3nhVsif85eU6jyct3A==", + "dependencies": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.1.tgz", + "integrity": "sha512-jztv5Mirca42ilxmMDjzLdXcoAmRhZskGafGL49sRo5u7swEZcToEFrq6vtX5YMbSyTVrE9Teog5EFexY5Ff2Q==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.1", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.1.tgz", + "integrity": "sha512-LHC5m6tYpEu1iNbONfvMbwtErboyTZJfEIPoD78Ei5MVr36vZQCaCla5mvo36+q/a2NAk2//fA5Rx3I1Kf7+lQ==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-stream": "^2.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.0.2.tgz", + "integrity": "sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.1.tgz", + "integrity": "sha512-NpHVOAwddo+OyyIoujDL9zGL96piHWrTNXqltWmBvlUoWgt1HPyBuKs6oHjioyFnNZXUqveTOkEEq0U5w6Uv8A==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.0.0.tgz", + "integrity": "sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.1.tgz", + "integrity": "sha512-w72Qwsb+IaEYEFtYICn0Do42eFju78hTaBzzJfT107lFOPdbjWjKnFutV+6GL/nZd5HWXY7ccAKka++C3NrjHw==", + "dependencies": { + "@smithy/property-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.1.tgz", + "integrity": "sha512-dNF45caelEBambo0SgkzQ0v76m4YM+aFKZNTtSafy7P5dVF8TbjZuR2UX1A5gJABD9XK6lzN+v/9Yfzj/EDgGg==", + "dependencies": { + "@smithy/config-resolver": "^2.0.1", + "@smithy/credential-provider-imds": "^2.0.1", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/property-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.1.tgz", + "integrity": "sha512-2a0IOtwIKC46EEo7E7cxDN8u2jwOiYYJqcFKA6rd5rdXqKakHT2Gc+AqHWngr0IEHUfW92zX12wRQKwyoqZf2Q==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.95", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz", + "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", + "dev": true + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/esbuild": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", + "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.39", + "esbuild-android-arm64": "0.14.39", + "esbuild-darwin-64": "0.14.39", + "esbuild-darwin-arm64": "0.14.39", + "esbuild-freebsd-64": "0.14.39", + "esbuild-freebsd-arm64": "0.14.39", + "esbuild-linux-32": "0.14.39", + "esbuild-linux-64": "0.14.39", + "esbuild-linux-arm": "0.14.39", + "esbuild-linux-arm64": "0.14.39", + "esbuild-linux-mips64le": "0.14.39", + "esbuild-linux-ppc64le": "0.14.39", + "esbuild-linux-riscv64": "0.14.39", + "esbuild-linux-s390x": "0.14.39", + "esbuild-netbsd-64": "0.14.39", + "esbuild-openbsd-64": "0.14.39", + "esbuild-sunos-64": "0.14.39", + "esbuild-windows-32": "0.14.39", + "esbuild-windows-64": "0.14.39", + "esbuild-windows-arm64": "0.14.39" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", + "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", + "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", + "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", + "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", + "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", + "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", + "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", + "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", + "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", + "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", + "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", + "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", + "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", + "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", + "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", + "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", + "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", + "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", + "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", + "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + } + }, + "dependencies": { + "@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/client-codebuild": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.382.0.tgz", + "integrity": "sha512-hRqIdhgBpD9ZjWvsAlYenW6h84OiwW3aMlHklV+O8AAzHh4y4tY3ohhtLGvLCh2wt5Pw5HEL2/B5w7/Z/qMCMw==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.382.0", + "@aws-sdk/credential-provider-node": "3.382.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-signing": "3.379.1", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sso": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.382.0.tgz", + "integrity": "sha512-ge11t4hJllOF8pBNF0p1X52lLqUsLGAoey24fvk3fyvvczeLpegGYh2kdLG0iwFTDgRxaUqK+kboH5Wy9ux/pw==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.382.0.tgz", + "integrity": "sha512-hTfvB1ftbrqaz7qiEkmRobzUQwG34oZlByobn8Frdr5ZQbJk969bX6evQAPyKlJEr26+kL9TnaX+rbLR/+gwHQ==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sts": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.382.0.tgz", + "integrity": "sha512-G5wgahrOqmrljjyLVGASIZUXIIdalbCo0z4PuFHdb2R2CVfwO8renfgrmk4brT9tIxIfen5bRA7ftXMe7yrgRA==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.382.0", + "@aws-sdk/middleware-host-header": "3.379.1", + "@aws-sdk/middleware-logger": "3.378.0", + "@aws-sdk/middleware-recursion-detection": "3.378.0", + "@aws-sdk/middleware-sdk-sts": "3.379.1", + "@aws-sdk/middleware-signing": "3.379.1", + "@aws-sdk/middleware-user-agent": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@aws-sdk/util-user-agent-browser": "3.378.0", + "@aws-sdk/util-user-agent-node": "3.378.0", + "@smithy/config-resolver": "^2.0.1", + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/hash-node": "^2.0.1", + "@smithy/invalid-dependency": "^2.0.1", + "@smithy/middleware-content-length": "^2.0.1", + "@smithy/middleware-endpoint": "^2.0.1", + "@smithy/middleware-retry": "^2.0.1", + "@smithy/middleware-serde": "^2.0.1", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/smithy-client": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.1", + "@smithy/util-defaults-mode-node": "^2.0.1", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.378.0.tgz", + "integrity": "sha512-B2OVdO9kBClDwGgWTBLAQwFV8qYTYGyVujg++1FZFSFMt8ORFdZ5fNpErvJtiSjYiOOQMzyBeSNhKyYNXCiJjQ==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.382.0.tgz", + "integrity": "sha512-31pi44WWri2WQmagqptUv7x3Nq8pQ6H06OCQx5goEm77SosSdwQwyBPrS9Pg0yI9aljFAxF+rZ75degsCorbQg==", + "requires": { + "@aws-sdk/credential-provider-env": "3.378.0", + "@aws-sdk/credential-provider-process": "3.378.0", + "@aws-sdk/credential-provider-sso": "3.382.0", + "@aws-sdk/credential-provider-web-identity": "3.378.0", + "@aws-sdk/types": "3.378.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.382.0.tgz", + "integrity": "sha512-q6AWCCb0E0cH/Y5Dtln0QssbCBXDbV4PoTV3EdRuGoJcHyNfHJ8X0mqcc7k44wG4Piazu+ufZThvn43W7W9a4g==", + "requires": { + "@aws-sdk/credential-provider-env": "3.378.0", + "@aws-sdk/credential-provider-ini": "3.382.0", + "@aws-sdk/credential-provider-process": "3.378.0", + "@aws-sdk/credential-provider-sso": "3.382.0", + "@aws-sdk/credential-provider-web-identity": "3.378.0", + "@aws-sdk/types": "3.378.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.378.0.tgz", + "integrity": "sha512-KFTIy7u+wXj3eDua4rgS0tODzMnXtXhAm1RxzCW9FL5JLBBrd82ymCj1Dp72217Sw5Do6NjCnDTTNkCHZMA77w==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.382.0.tgz", + "integrity": "sha512-tKCQKqxnAHeRD7pQNmDmLWwC7pt5koo6yiQTVQ382U+8xx7BNsApE1zdC4LrtrVN1FYqVbw5kXjYFtSCtaUxGA==", + "requires": { + "@aws-sdk/client-sso": "3.382.0", + "@aws-sdk/token-providers": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.378.0.tgz", + "integrity": "sha512-GWjydOszhc4xDF8xuPtBvboglXQr0gwCW1oHAvmLcOT38+Hd6qnKywnMSeoXYRPgoKfF9TkWQgW1jxplzCG0UA==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.379.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.379.1.tgz", + "integrity": "sha512-LI4KpAFWNWVr2aH2vRVblr0Y8tvDz23lj8LOmbDmCrzd5M21nxuocI/8nEAQj55LiTIf9Zs+dHCdsyegnFXdrA==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.378.0.tgz", + "integrity": "sha512-l1DyaDLm3KeBMNMuANI3scWh8Xvu248x+vw6Z7ExWOhGXFmQ1MW7YvASg/SdxWkhlF9HmkkTif1LdMB22x6QDA==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.378.0.tgz", + "integrity": "sha512-mUMfHAz0oGNIWiTZHTVJb+I515Hqs2zx1j36Le4MMiiaMkPW1SRUF1FIwGuc1wh6E8jB5q+XfEMriDjRi4TZRA==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.379.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.379.1.tgz", + "integrity": "sha512-SK3gSyT0XbLiY12+AjLFYL9YngxOXHnZF3Z33Cdd4a+AUYrVBV7JBEEGD1Nlwrcmko+3XgaKlmgUaR5s91MYvg==", + "requires": { + "@aws-sdk/middleware-signing": "3.379.1", + "@aws-sdk/types": "3.378.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.379.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.379.1.tgz", + "integrity": "sha512-kBk2ZUvR84EM4fICjr8K+Ykpf8SI1UzzPp2/UVYZ0X+4H/ZCjfSqohGRwHykMqeplne9qHSL7/rGJs1H3l3gPg==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.382.0.tgz", + "integrity": "sha512-LFRW1jmXOrOAd3911ktn6oaYmuurNnulbdRMOUdwz99GGdLVFipQhOi9idKswb8IOhPa4jEVQt25Kcv7ctvu0A==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@aws-sdk/util-endpoints": "3.382.0", + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/token-providers": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.382.0.tgz", + "integrity": "sha512-axn4IyPpHdkXi8G06KCB3tPz79DipZFFH9N9YVDpLMnDYTdfX36HGdYzINaQc+z+XPbEpa1ZpoIzWScHRjFjdg==", + "requires": { + "@aws-sdk/client-sso-oidc": "3.382.0", + "@aws-sdk/types": "3.378.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.0", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/types": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.378.0.tgz", + "integrity": "sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.382.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.382.0.tgz", + "integrity": "sha512-flajPyjmjNG67fXk7l4GoTB/7J11VBqtFZXuuAZKhKU07Ia3IQupsFqNf5lV8D44ZgjnKH0fTGnv3dUALjW7Wg==", + "requires": { + "@aws-sdk/types": "3.378.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.378.0.tgz", + "integrity": "sha512-FSCpagzftK1W+m7Ar6lpX7/Gr9y5P56nhFYz8U4EYQ4PkufS6czWX9YW+/FA5OYV0vlQ/SvPqMnzoHIPUNhZrQ==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/types": "^2.0.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.378.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.378.0.tgz", + "integrity": "sha512-IdwVJV0E96MkJeFte4dlWqvB+oiqCiZ5lOlheY3W9NynTuuX0GGYNC8Y9yIsV8Oava1+ujpJq0ww6qXdYxmO4A==", + "requires": { + "@aws-sdk/types": "3.378.0", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@smithy/abort-controller": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.1.tgz", + "integrity": "sha512-0s7XjIbsTwZyUW9OwXQ8J6x1UiA1TNCh60Vaw56nHahL7kUZsLhmTlWiaxfLkFtO2Utkj8YewcpHTYpxaTzO+w==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/config-resolver": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.1.tgz", + "integrity": "sha512-l83Pm7hV+8CBQOCmBRopWDtF+CURUJol7NsuPYvimiDhkC2F8Ba9T1imSFE+pD1UIJ9jlsDPAnZfPJT5cjnuEw==", + "requires": { + "@smithy/types": "^2.0.2", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/credential-provider-imds": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.1.tgz", + "integrity": "sha512-8VxriuRINNEfVZjEFKBY75y9ZWAx73DZ5K/u+3LmB6r8WR2h3NaFxFKMlwlq0uzNdGhD1ouKBn9XWEGYHKiPLw==", + "requires": { + "@smithy/node-config-provider": "^2.0.1", + "@smithy/property-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "@smithy/eventstream-codec": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.1.tgz", + "integrity": "sha512-/IiNB7gQM2y2ZC/GAWOWDa8+iXfhr1g9Xe5979cQEOdCWDISvrAiv18cn3OtIQUhbYOR3gm7QtCpkq1to2takQ==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/fetch-http-handler": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.1.tgz", + "integrity": "sha512-/SoU/ClazgcdOxgE4zA7RX8euiELwpsrKCSvulVQvu9zpmqJRyEJn8ZTWYFV17/eHOBdHTs9kqodhNhsNT+cUw==", + "requires": { + "@smithy/protocol-http": "^2.0.1", + "@smithy/querystring-builder": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/hash-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.1.tgz", + "integrity": "sha512-oTKYimQdF4psX54ZonpcIE+MXjMUWFxLCNosjPkJPFQ9whRX0K/PFX/+JZGRQh3zO9RlEOEUIbhy9NO+Wha6hw==", + "requires": { + "@smithy/types": "^2.0.2", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/invalid-dependency": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.1.tgz", + "integrity": "sha512-2q/Eb0AE662zwyMV+z+TL7deBwcHCgaZZGc0RItamBE8kak3MzCi/EZCNoFWoBfxgQ4jfR12wm8KKsSXhJzJtQ==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-content-length": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.1.tgz", + "integrity": "sha512-IZhRSk5GkVBcrKaqPXddBS2uKhaqwBgaSgbBb1OJyGsKe7SxRFbclWS0LqOR9fKUkDl+3lL8E2ffpo6EQg0igw==", + "requires": { + "@smithy/protocol-http": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-endpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.1.tgz", + "integrity": "sha512-uz/KI1MBd9WHrrkVFZO4L4Wyv24raf0oR4EsOYEeG5jPJO5U+C7MZGLcMxX8gWERDn1sycBDqmGv8fjUMLxT6w==", + "requires": { + "@smithy/middleware-serde": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/url-parser": "^2.0.1", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.1.tgz", + "integrity": "sha512-NKHF4i0gjSyjO6C0ZyjEpNqzGgIu7s8HOK6oT/1Jqws2Q1GynR1xV8XTUs1gKXeaNRzbzKQRewHHmfPwZjOtHA==", + "requires": { + "@smithy/protocol-http": "^2.0.1", + "@smithy/service-error-classification": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-retry": "^2.0.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + } + }, + "@smithy/middleware-serde": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.1.tgz", + "integrity": "sha512-uKxPaC6ItH9ZXdpdqNtf8sda7GcU4SPMp0tomq/5lUg9oiMa/Q7+kD35MUrpKaX3IVXVrwEtkjCU9dogZ/RAUA==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/middleware-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz", + "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/node-config-provider": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.1.tgz", + "integrity": "sha512-Zoel4CPkKRTQ2XxmozZUfqBYqjPKL53/SvTDhJHj+VBSiJy6MXRav1iDCyFPS92t40Uh+Yi+Km5Ch3hQ+c/zSA==", + "requires": { + "@smithy/property-provider": "^2.0.1", + "@smithy/shared-ini-file-loader": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/node-http-handler": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.1.tgz", + "integrity": "sha512-Zv3fxk3p9tsmPT2CKMsbuwbbxnq2gzLDIulxv+yI6aE+02WPYorObbbe9gh7SW3weadMODL1vTfOoJ9yFypDzg==", + "requires": { + "@smithy/abort-controller": "^2.0.1", + "@smithy/protocol-http": "^2.0.1", + "@smithy/querystring-builder": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/property-provider": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.1.tgz", + "integrity": "sha512-pmJRyY9SF6sutWIktIhe+bUdSQDxv/qZ4mYr3/u+u45riTPN7nmRxPo+e4sjWVoM0caKFjRSlj3tf5teRFy0Vg==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/protocol-http": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.1.tgz", + "integrity": "sha512-mrkMAp0wtaDEIkgRObWYxI1Kun1tm6Iu6rK+X4utb6Ah7Uc3Kk4VIWwK/rBHdYGReiLIrxFCB1rq4a2gyZnSgg==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/querystring-builder": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.1.tgz", + "integrity": "sha512-bp+93WFzx1FojVEIeFPtG0A1pKsFdCUcZvVdZdRlmNooOUrz9Mm9bneRd8hDwAQ37pxiZkCOxopSXXRQN10mYw==", + "requires": { + "@smithy/types": "^2.0.2", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/querystring-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.1.tgz", + "integrity": "sha512-h+e7k1z+IvI2sSbUBG9Aq46JsgLl4UqIUl6aigAlRBj+P6ocNXpM6Yn1vMBw5ijtXeZbYpd1YvCxwDgdw3jhmg==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/service-error-classification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz", + "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==" + }, + "@smithy/shared-ini-file-loader": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.1.tgz", + "integrity": "sha512-a463YiZrPGvM+F336rIF8pLfQsHAdCRAn/BiI/EWzg5xLoxbC7GSxIgliDDXrOu0z8gT3nhVsif85eU6jyct3A==", + "requires": { + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/signature-v4": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.1.tgz", + "integrity": "sha512-jztv5Mirca42ilxmMDjzLdXcoAmRhZskGafGL49sRo5u7swEZcToEFrq6vtX5YMbSyTVrE9Teog5EFexY5Ff2Q==", + "requires": { + "@smithy/eventstream-codec": "^2.0.1", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/smithy-client": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.1.tgz", + "integrity": "sha512-LHC5m6tYpEu1iNbONfvMbwtErboyTZJfEIPoD78Ei5MVr36vZQCaCla5mvo36+q/a2NAk2//fA5Rx3I1Kf7+lQ==", + "requires": { + "@smithy/middleware-stack": "^2.0.0", + "@smithy/types": "^2.0.2", + "@smithy/util-stream": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "@smithy/types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.0.2.tgz", + "integrity": "sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/url-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.1.tgz", + "integrity": "sha512-NpHVOAwddo+OyyIoujDL9zGL96piHWrTNXqltWmBvlUoWgt1HPyBuKs6oHjioyFnNZXUqveTOkEEq0U5w6Uv8A==", + "requires": { + "@smithy/querystring-parser": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "requires": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-body-length-node": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.0.0.tgz", + "integrity": "sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "requires": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-defaults-mode-browser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.1.tgz", + "integrity": "sha512-w72Qwsb+IaEYEFtYICn0Do42eFju78hTaBzzJfT107lFOPdbjWjKnFutV+6GL/nZd5HWXY7ccAKka++C3NrjHw==", + "requires": { + "@smithy/property-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-defaults-mode-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.1.tgz", + "integrity": "sha512-dNF45caelEBambo0SgkzQ0v76m4YM+aFKZNTtSafy7P5dVF8TbjZuR2UX1A5gJABD9XK6lzN+v/9Yfzj/EDgGg==", + "requires": { + "@smithy/config-resolver": "^2.0.1", + "@smithy/credential-provider-imds": "^2.0.1", + "@smithy/node-config-provider": "^2.0.1", + "@smithy/property-provider": "^2.0.1", + "@smithy/types": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-middleware": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz", + "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-retry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz", + "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==", + "requires": { + "@smithy/service-error-classification": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.1.tgz", + "integrity": "sha512-2a0IOtwIKC46EEo7E7cxDN8u2jwOiYYJqcFKA6rd5rdXqKakHT2Gc+AqHWngr0IEHUfW92zX12wRQKwyoqZf2Q==", + "requires": { + "@smithy/fetch-http-handler": "^2.0.1", + "@smithy/node-http-handler": "^2.0.1", + "@smithy/types": "^2.0.2", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "requires": { + "tslib": "^2.5.0" + } + }, + "@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "requires": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@types/aws-lambda": { + "version": "8.10.95", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz", + "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==", + "dev": true + }, + "@types/node": { + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", + "dev": true + }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "esbuild": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", + "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.39", + "esbuild-android-arm64": "0.14.39", + "esbuild-darwin-64": "0.14.39", + "esbuild-darwin-arm64": "0.14.39", + "esbuild-freebsd-64": "0.14.39", + "esbuild-freebsd-arm64": "0.14.39", + "esbuild-linux-32": "0.14.39", + "esbuild-linux-64": "0.14.39", + "esbuild-linux-arm": "0.14.39", + "esbuild-linux-arm64": "0.14.39", + "esbuild-linux-mips64le": "0.14.39", + "esbuild-linux-ppc64le": "0.14.39", + "esbuild-linux-riscv64": "0.14.39", + "esbuild-linux-s390x": "0.14.39", + "esbuild-netbsd-64": "0.14.39", + "esbuild-openbsd-64": "0.14.39", + "esbuild-sunos-64": "0.14.39", + "esbuild-windows-32": "0.14.39", + "esbuild-windows-64": "0.14.39", + "esbuild-windows-arm64": "0.14.39" + } + }, + "esbuild-android-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", + "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", + "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", + "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", + "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", + "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", + "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", + "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", + "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", + "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", + "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", + "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", + "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", + "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", + "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", + "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", + "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", + "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", + "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", + "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", + "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "dev": true, + "optional": true + }, + "fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "requires": { + "strnum": "^1.0.5" + } + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } +} diff --git a/lambda/nodejs-build/package.json b/lambda/trigger-codebuild/package.json similarity index 100% rename from lambda/nodejs-build/package.json rename to lambda/trigger-codebuild/package.json diff --git a/src/index.ts b/src/index.ts index 968f630..47dfdc4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,2 @@ export * from './nodejs-build'; +export * from './soci-index-build'; diff --git a/src/nodejs-build.ts b/src/nodejs-build.ts index d7e8f2c..16fc91e 100644 --- a/src/nodejs-build.ts +++ b/src/nodejs-build.ts @@ -1,6 +1,6 @@ import { createHash } from 'crypto'; import { posix, join, basename } from 'path'; -import { Annotations, CfnResource, CustomResource, Duration } from 'aws-cdk-lib'; +import { Annotations, CustomResource, Duration } from 'aws-cdk-lib'; import { IDistribution } from 'aws-cdk-lib/aws-cloudfront'; import { BuildSpec, LinuxBuildImage, Project } from 'aws-cdk-lib/aws-codebuild'; import { PolicyStatement } from 'aws-cdk-lib/aws-iam'; @@ -9,7 +9,7 @@ import { IBucket } from 'aws-cdk-lib/aws-s3'; import { Asset, AssetProps } from 'aws-cdk-lib/aws-s3-assets'; import { BucketDeployment, Source } from 'aws-cdk-lib/aws-s3-deployment'; import { Construct } from 'constructs'; -import { ResourceProperties } from './types'; +import { NodejsBuildResourceProps } from './types'; export interface AssetConfig extends AssetProps { /** @@ -79,7 +79,7 @@ export class NodejsBuild extends Construct { const handler = new SingletonFunction(this, 'CustomResourceHandler', { // Use raw string to avoid from tightening CDK version requirement runtime: new Runtime('nodejs18.x', RuntimeFamily.NODEJS), - code: Code.fromAsset(join(__dirname, '../lambda/nodejs-build/dist')), + code: Code.fromAsset(join(__dirname, '../lambda/trigger-codebuild/dist')), handler: 'index.handler', uuid: '25648b21-2c40-4f09-aa65-b6bbb0c44659', // generated for this construct lambdaPurpose: 'NodejsBuildCustomResourceHandler', @@ -105,7 +105,7 @@ export class NodejsBuild extends Construct { } const project = new Project(this, 'Project', { - environment: { buildImage: LinuxBuildImage.STANDARD_6_0 }, + environment: { buildImage: LinuxBuildImage.fromCodeBuildImageId(buildImage) }, buildSpec: BuildSpec.fromObject({ version: '0.2', phases: { @@ -184,8 +184,6 @@ curl -vv -i -X PUT -H 'Content-Type:' -d "@payload.json" "$responseURL" }), }); - (project.node.defaultChild as CfnResource).addPropertyOverride('Environment.Image', buildImage); - handler.addToRolePolicy( new PolicyStatement({ actions: ['codebuild:StartBuild'], @@ -211,14 +209,15 @@ curl -vv -i -X PUT -H 'Content-Type:' -d "@payload.json" "$responseURL" const bucket = assets[0].bucket; bucket.grantWrite(project); - const sources: ResourceProperties['sources'] = props.assets.map((s, i) => ({ + const sources: NodejsBuildResourceProps['sources'] = props.assets.map((s, i) => ({ sourceBucketName: assets[i].s3BucketName, sourceObjectKey: assets[i].s3ObjectKey, extractPath: s.extractPath ?? basename(s.path), commands: s.commands, })); - const properties: ResourceProperties = { + const properties: NodejsBuildResourceProps = { + type: 'NodejsBuild', sources, destinationBucketName: bucket.bucketName, destinationObjectKey: `${assetHash}.zip`, diff --git a/src/singleton-project.ts b/src/singleton-project.ts new file mode 100644 index 0000000..8ccb4bf --- /dev/null +++ b/src/singleton-project.ts @@ -0,0 +1,31 @@ +import { Stack } from 'aws-cdk-lib'; +import { Project, ProjectProps } from 'aws-cdk-lib/aws-codebuild'; +import { Construct } from 'constructs'; + +export interface SingletonProjectProps extends ProjectProps { + readonly uuid: string; + readonly projectPurpose: string; +} + +export class SingletonProject extends Construct { + public readonly project: Project; + + constructor(scope: Construct, id: string, props: SingletonProjectProps) { + super(scope, id); + this.project = this.ensureProject(props); + } + + private ensureProject(props: SingletonProjectProps): Project { + const constructName = props.projectPurpose + this.slugify(props.uuid); + const existing = Stack.of(this).node.tryFindChild(constructName); + if (existing) { + return existing as Project; + } + + return new Project(Stack.of(this), constructName, props); + } + + private slugify(x: string): string { + return x.replace(/[^a-zA-Z0-9]/g, ''); + } +} diff --git a/src/soci-index-build.ts b/src/soci-index-build.ts new file mode 100644 index 0000000..7fecb06 --- /dev/null +++ b/src/soci-index-build.ts @@ -0,0 +1,126 @@ +import { join } from 'path'; +import { CustomResource, Duration } from 'aws-cdk-lib'; +import { BuildSpec, LinuxBuildImage } from 'aws-cdk-lib/aws-codebuild'; +import { IRepository } from 'aws-cdk-lib/aws-ecr'; +import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets'; +import { PolicyStatement } from 'aws-cdk-lib/aws-iam'; +import { Code, Runtime, RuntimeFamily, SingletonFunction } from 'aws-cdk-lib/aws-lambda'; +import { Construct } from 'constructs'; +import { SingletonProject } from './singleton-project'; +import { SociIndexBuildResourceProps } from './types'; + +export interface SociIndexBuildProps { + /** + * The ECR repository your container image is stored. + * You can only specify a repository in the same environment (account/region). + * The index artifact will be uploaded to this repository. + */ + readonly repository: IRepository; + + /** + * The tag of the container image you want to build index for. + */ + readonly imageTag: string; +} + +export class SociIndexBuild extends Construct { + /** + * A utility method to create a SociIndexBuild construct from a DockerImageAsset instance. + */ + public static fromImageAsset(scope: Construct, id: string, imageAsset: DockerImageAsset) { + return new SociIndexBuild(scope, id, { + repository: imageAsset.repository, + imageTag: imageAsset.assetHash, + }); + } + + constructor(scope: Construct, id: string, props: SociIndexBuildProps) { + super(scope, id); + + const handler = new SingletonFunction(this, 'CustomResourceHandler', { + // Use raw string to avoid from tightening CDK version requirement + runtime: new Runtime('nodejs18.x', RuntimeFamily.NODEJS), + code: Code.fromAsset(join(__dirname, '../lambda/trigger-codebuild/dist')), + handler: 'index.handler', + uuid: 'db740fd5-5436-4a84-8a09-e6dfcd01f4f3', // generated for this construct + lambdaPurpose: 'DeployTimeBuildCustomResourceHandler', + timeout: Duration.minutes(5), + }); + + const project = new SingletonProject(this, 'Project', { + uuid: '024cf76a-1003-4aa4-aa4b-12c32c09ca3c', // generated for this construct + projectPurpose: 'SociIndexBuild', + environment: { buildImage: LinuxBuildImage.fromCodeBuildImageId('aws/codebuild/standard:7.0') }, + buildSpec: BuildSpec.fromObject({ + version: '0.2', + phases: { + build: { + commands: [ + 'current_dir=$(pwd)', + 'wget --quiet -O soci-wrapper.tar.gz https://github.com/tmokmss/soci-wrapper/releases/download/v0.1.0/soci-wrapper-v0.1.0-linux-amd64.tar.gz', + 'tar -xvzf soci-wrapper.tar.gz', + '', + 'export AWS_ACCOUNT=$(aws sts get-caller-identity --query "Account" --output text)', + 'export REGISTRY_USER=AWS', + 'export REGISTRY_PASSWORD=$(aws ecr get-login-password --region $AWS_REGION)', + 'export REGISTRY=$AWS_ACCOUNT.dkr.ecr.$AWS_REGION.amazonaws.com', + 'aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $REGISTRY', + 'REPO_NAME=$repositoryName', + 'IMAGE_TAG=$imageTag', + 'DIGEST=$(aws ecr describe-images --repository-name $REPO_NAME --image-ids imageTag=$IMAGE_TAG --query imageDetails[0].imageDigest --output text)', + './soci-wrapper $REPO_NAME $DIGEST $AWS_REGION $AWS_ACCOUNT', + ], + }, + post_build: { + commands: [ + 'echo Build completed on `date`', + ` +STATUS='SUCCESS' +if [ $CODEBUILD_BUILD_SUCCEEDING -ne 1 ] # Test if the build is failing +then +STATUS='FAILED' +REASON="deploy-time-build failed. See CloudWatch Log stream for the detailed reason: +https://$AWS_REGION.console.aws.amazon.com/cloudwatch/home?region=$AWS_REGION#logsV2:log-groups/log-group/\\$252Faws\\$252Fcodebuild\\$252F$projectName/log-events/$CODEBUILD_LOG_PATH" +fi +cat < payload.json +{ + "StackId": "$stackId", + "RequestId": "$requestId", + "LogicalResourceId":"$logicalResourceId", + "PhysicalResourceId": "$imageTag", + "Status": "$STATUS", + "Reason": "$REASON" +} +EOF +curl -vv -i -X PUT -H 'Content-Type:' -d "@payload.json" "$responseURL" + `, + ], + }, + }, + }), + }).project; + + handler.addToRolePolicy( + new PolicyStatement({ + actions: ['codebuild:StartBuild'], + resources: [project.projectArn], + }), + ); + + props.repository.grantPullPush(project); + props.repository.grant(project, 'ecr:DescribeImages'); + + const properties: SociIndexBuildResourceProps = { + type: 'SociIndexBuild', + imageTag: props.imageTag, + repositoryName: props.repository.repositoryName, + codeBuildProjectName: project.projectName, + }; + + new CustomResource(this, 'Resource', { + serviceToken: handler.functionArn, + resourceType: 'Custom::CDKSociIndexBuild', + properties, + }); + } +} diff --git a/src/types.ts b/src/types.ts index 4f2f14c..bdbafee 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,7 @@ -export type ResourceProperties = { +export type ResourceProperties = NodejsBuildResourceProps | SociIndexBuildResourceProps; + +export type NodejsBuildResourceProps = { + type: 'NodejsBuild'; sources: { sourceBucketName: string; sourceObjectKey: string; @@ -13,3 +16,10 @@ export type ResourceProperties = { buildCommands: string[]; codeBuildProjectName: string; }; + +export type SociIndexBuildResourceProps = { + type: 'SociIndexBuild'; + repositoryName: string; + imageTag: string; + codeBuildProjectName: string; +}; diff --git a/test/integ.soci-index-build.ts b/test/integ.soci-index-build.ts new file mode 100644 index 0000000..bc947ce --- /dev/null +++ b/test/integ.soci-index-build.ts @@ -0,0 +1,39 @@ +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { Stack, StackProps, App } from 'aws-cdk-lib'; +import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets'; +import { Construct } from 'constructs'; +import { SociIndexBuild } from '../src'; + +const app = new App(); + +class TestStack extends Stack { + constructor(scope: Construct, id: string, props: StackProps = {}) { + super(scope, id, props); + + // make sure we can build more than one indices. + { + const parent = new Construct(this, 'Image1'); + const asset = new DockerImageAsset(parent, 'Image', { + directory: '../example/example-image', + buildArgs: { DUMMY_FILE_SIZE_MB: '10' }, + }); + new SociIndexBuild(parent, 'Index', { imageTag: asset.assetHash, repository: asset.repository }); + } + + { + const parent = new Construct(this, 'Image2'); + const asset = new DockerImageAsset(parent, 'Image', { + directory: '../example/example-image', + buildArgs: { DUMMY_FILE_SIZE_MB: '500' }, + }); + SociIndexBuild.fromImageAsset(parent, 'Index', asset); + } + } +} + +const stack = new TestStack(app, 'SociIndexBuildIntegTest'); + +new IntegTest(app, 'Test', { + testCases: [stack], + diffAssets: true, +}); diff --git a/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json b/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json index 10390f0..b190024 100644 --- a/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json +++ b/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json @@ -402,6 +402,7 @@ "Arn" ] }, + "type": "NodejsBuild", "sources": [ { "sourceBucketName": { @@ -603,7 +604,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8" + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8" }, "S3Key": { "Fn::Join": [ @@ -616,7 +617,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C" + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" } ] } @@ -629,7 +630,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C" + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" } ] } @@ -854,17 +855,17 @@ "Type": "String", "Description": "Artifact hash for asset \"e57c1acaa363d7d2b81736776007a7091bc73dff4aeb8135627c4511a51e7dca\"" }, - "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8": { + "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8": { "Type": "String", - "Description": "S3 bucket for asset \"a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b\"" + "Description": "S3 bucket for asset \"b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363\"" }, - "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C": { + "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034": { "Type": "String", - "Description": "S3 key for asset version \"a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b\"" + "Description": "S3 key for asset version \"b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363\"" }, - "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bArtifactHash156A92A2": { + "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363ArtifactHash63F36728": { "Type": "String", - "Description": "Artifact hash for asset \"a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b\"" + "Description": "Artifact hash for asset \"b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363\"" }, "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945": { "Type": "String", diff --git a/test/nodejs-build.integ.snapshot/asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/index.js b/test/nodejs-build.integ.snapshot/asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/index.js deleted file mode 100644 index e56a43b..0000000 --- a/test/nodejs-build.integ.snapshot/asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/index.js +++ /dev/null @@ -1,4727 +0,0 @@ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// node_modules/adm-zip/util/fileSystem.js -var require_fileSystem = __commonJS({ - "node_modules/adm-zip/util/fileSystem.js"(exports) { - exports.require = function() { - if (typeof process === "object" && process.versions && process.versions["electron"]) { - try { - const originalFs = require("original-fs"); - if (Object.keys(originalFs).length > 0) { - return originalFs; - } - } catch (e) { - } - } - return require("fs"); - }; - } -}); - -// node_modules/adm-zip/util/constants.js -var require_constants = __commonJS({ - "node_modules/adm-zip/util/constants.js"(exports, module2) { - module2.exports = { - LOCHDR: 30, - LOCSIG: 67324752, - LOCVER: 4, - LOCFLG: 6, - LOCHOW: 8, - LOCTIM: 10, - LOCCRC: 14, - LOCSIZ: 18, - LOCLEN: 22, - LOCNAM: 26, - LOCEXT: 28, - EXTSIG: 134695760, - EXTHDR: 16, - EXTCRC: 4, - EXTSIZ: 8, - EXTLEN: 12, - CENHDR: 46, - CENSIG: 33639248, - CENVEM: 4, - CENVER: 6, - CENFLG: 8, - CENHOW: 10, - CENTIM: 12, - CENCRC: 16, - CENSIZ: 20, - CENLEN: 24, - CENNAM: 28, - CENEXT: 30, - CENCOM: 32, - CENDSK: 34, - CENATT: 36, - CENATX: 38, - CENOFF: 42, - ENDHDR: 22, - ENDSIG: 101010256, - ENDSUB: 8, - ENDTOT: 10, - ENDSIZ: 12, - ENDOFF: 16, - ENDCOM: 20, - END64HDR: 20, - END64SIG: 117853008, - END64START: 4, - END64OFF: 8, - END64NUMDISKS: 16, - ZIP64SIG: 101075792, - ZIP64HDR: 56, - ZIP64LEAD: 12, - ZIP64SIZE: 4, - ZIP64VEM: 12, - ZIP64VER: 14, - ZIP64DSK: 16, - ZIP64DSKDIR: 20, - ZIP64SUB: 24, - ZIP64TOT: 32, - ZIP64SIZB: 40, - ZIP64OFF: 48, - ZIP64EXTRA: 56, - STORED: 0, - SHRUNK: 1, - REDUCED1: 2, - REDUCED2: 3, - REDUCED3: 4, - REDUCED4: 5, - IMPLODED: 6, - DEFLATED: 8, - ENHANCED_DEFLATED: 9, - PKWARE: 10, - BZIP2: 12, - LZMA: 14, - IBM_TERSE: 18, - IBM_LZ77: 19, - AES_ENCRYPT: 99, - FLG_ENC: 1, - FLG_COMP1: 2, - FLG_COMP2: 4, - FLG_DESC: 8, - FLG_ENH: 16, - FLG_PATCH: 32, - FLG_STR: 64, - FLG_EFS: 2048, - FLG_MSK: 4096, - FILE: 2, - BUFFER: 1, - NONE: 0, - EF_ID: 0, - EF_SIZE: 2, - ID_ZIP64: 1, - ID_AVINFO: 7, - ID_PFS: 8, - ID_OS2: 9, - ID_NTFS: 10, - ID_OPENVMS: 12, - ID_UNIX: 13, - ID_FORK: 14, - ID_PATCH: 15, - ID_X509_PKCS7: 20, - ID_X509_CERTID_F: 21, - ID_X509_CERTID_C: 22, - ID_STRONGENC: 23, - ID_RECORD_MGT: 24, - ID_X509_PKCS7_RL: 25, - ID_IBM1: 101, - ID_IBM2: 102, - ID_POSZIP: 18064, - EF_ZIP64_OR_32: 4294967295, - EF_ZIP64_OR_16: 65535, - EF_ZIP64_SUNCOMP: 0, - EF_ZIP64_SCOMP: 8, - EF_ZIP64_RHO: 16, - EF_ZIP64_DSN: 24 - }; - } -}); - -// node_modules/adm-zip/util/utils.js -var require_utils = __commonJS({ - "node_modules/adm-zip/util/utils.js"(exports, module2) { - var fsystem = require_fileSystem().require(); - var pth = require("path"); - var Constants = require_constants(); - var isWin = typeof process === "object" && process.platform === "win32"; - var is_Obj = (obj) => obj && typeof obj === "object"; - var crcTable = new Uint32Array(256).map((t, c) => { - for (let k = 0; k < 8; k++) { - if ((c & 1) !== 0) { - c = 3988292384 ^ c >>> 1; - } else { - c >>>= 1; - } - } - return c >>> 0; - }); - function Utils(opts) { - this.sep = pth.sep; - this.fs = fsystem; - if (is_Obj(opts)) { - if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") { - this.fs = opts.fs; - } - } - } - module2.exports = Utils; - Utils.prototype.makeDir = function(folder) { - const self = this; - function mkdirSync2(fpath) { - let resolvedPath = fpath.split(self.sep)[0]; - fpath.split(self.sep).forEach(function(name) { - if (!name || name.substr(-1, 1) === ":") - return; - resolvedPath += self.sep + name; - var stat; - try { - stat = self.fs.statSync(resolvedPath); - } catch (e) { - self.fs.mkdirSync(resolvedPath); - } - if (stat && stat.isFile()) - throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); - }); - } - mkdirSync2(folder); - }; - Utils.prototype.writeFileTo = function(path2, content, overwrite, attr) { - const self = this; - if (self.fs.existsSync(path2)) { - if (!overwrite) - return false; - var stat = self.fs.statSync(path2); - if (stat.isDirectory()) { - return false; - } - } - var folder = pth.dirname(path2); - if (!self.fs.existsSync(folder)) { - self.makeDir(folder); - } - var fd; - try { - fd = self.fs.openSync(path2, "w", 438); - } catch (e) { - self.fs.chmodSync(path2, 438); - fd = self.fs.openSync(path2, "w", 438); - } - if (fd) { - try { - self.fs.writeSync(fd, content, 0, content.length, 0); - } finally { - self.fs.closeSync(fd); - } - } - self.fs.chmodSync(path2, attr || 438); - return true; - }; - Utils.prototype.writeFileToAsync = function(path2, content, overwrite, attr, callback) { - if (typeof attr === "function") { - callback = attr; - attr = void 0; - } - const self = this; - self.fs.exists(path2, function(exist) { - if (exist && !overwrite) - return callback(false); - self.fs.stat(path2, function(err, stat) { - if (exist && stat.isDirectory()) { - return callback(false); - } - var folder = pth.dirname(path2); - self.fs.exists(folder, function(exists) { - if (!exists) - self.makeDir(folder); - self.fs.open(path2, "w", 438, function(err2, fd) { - if (err2) { - self.fs.chmod(path2, 438, function() { - self.fs.open(path2, "w", 438, function(err3, fd2) { - self.fs.write(fd2, content, 0, content.length, 0, function() { - self.fs.close(fd2, function() { - self.fs.chmod(path2, attr || 438, function() { - callback(true); - }); - }); - }); - }); - }); - } else if (fd) { - self.fs.write(fd, content, 0, content.length, 0, function() { - self.fs.close(fd, function() { - self.fs.chmod(path2, attr || 438, function() { - callback(true); - }); - }); - }); - } else { - self.fs.chmod(path2, attr || 438, function() { - callback(true); - }); - } - }); - }); - }); - }); - }; - Utils.prototype.findFiles = function(path2) { - const self = this; - function findSync(dir, pattern, recursive) { - if (typeof pattern === "boolean") { - recursive = pattern; - pattern = void 0; - } - let files = []; - self.fs.readdirSync(dir).forEach(function(file) { - var path3 = pth.join(dir, file); - if (self.fs.statSync(path3).isDirectory() && recursive) - files = files.concat(findSync(path3, pattern, recursive)); - if (!pattern || pattern.test(path3)) { - files.push(pth.normalize(path3) + (self.fs.statSync(path3).isDirectory() ? self.sep : "")); - } - }); - return files; - } - return findSync(path2, void 0, true); - }; - Utils.prototype.getAttributes = function() { - }; - Utils.prototype.setAttributes = function() { - }; - Utils.crc32update = function(crc, byte) { - return crcTable[(crc ^ byte) & 255] ^ crc >>> 8; - }; - Utils.crc32 = function(buf) { - if (typeof buf === "string") { - buf = Buffer.from(buf, "utf8"); - } - if (!crcTable.length) - genCRCTable(); - let len = buf.length; - let crc = ~0; - for (let off = 0; off < len; ) - crc = Utils.crc32update(crc, buf[off++]); - return ~crc >>> 0; - }; - Utils.methodToString = function(method) { - switch (method) { - case Constants.STORED: - return "STORED (" + method + ")"; - case Constants.DEFLATED: - return "DEFLATED (" + method + ")"; - default: - return "UNSUPPORTED (" + method + ")"; - } - }; - Utils.canonical = function(path2) { - if (!path2) - return ""; - var safeSuffix = pth.posix.normalize("/" + path2.split("\\").join("/")); - return pth.join(".", safeSuffix); - }; - Utils.sanitize = function(prefix, name) { - prefix = pth.resolve(pth.normalize(prefix)); - var parts = name.split("/"); - for (var i = 0, l = parts.length; i < l; i++) { - var path2 = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep))); - if (path2.indexOf(prefix) === 0) { - return path2; - } - } - return pth.normalize(pth.join(prefix, pth.basename(name))); - }; - Utils.toBuffer = function toBuffer(input) { - if (Buffer.isBuffer(input)) { - return input; - } else if (input instanceof Uint8Array) { - return Buffer.from(input); - } else { - return typeof input === "string" ? Buffer.from(input, "utf8") : Buffer.alloc(0); - } - }; - Utils.readBigUInt64LE = function(buffer, index) { - var slice = Buffer.from(buffer.slice(index, index + 8)); - slice.swap64(); - return parseInt(`0x${slice.toString("hex")}`); - }; - Utils.isWin = isWin; - Utils.crcTable = crcTable; - } -}); - -// node_modules/adm-zip/util/errors.js -var require_errors = __commonJS({ - "node_modules/adm-zip/util/errors.js"(exports, module2) { - module2.exports = { - INVALID_LOC: "Invalid LOC header (bad signature)", - INVALID_CEN: "Invalid CEN header (bad signature)", - INVALID_END: "Invalid END header (bad signature)", - NO_DATA: "Nothing to decompress", - BAD_CRC: "CRC32 checksum failed", - FILE_IN_THE_WAY: "There is a file in the way: %s", - UNKNOWN_METHOD: "Invalid/unsupported compression method", - AVAIL_DATA: "inflate::Available inflate data did not terminate", - INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block", - TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes", - INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths", - INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length", - INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete", - INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths", - INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths", - INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement", - INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)", - CANT_EXTRACT_FILE: "Could not extract the file", - CANT_OVERRIDE: "Target file already exists", - NO_ZIP: "No zip file was loaded", - NO_ENTRY: "Entry doesn't exist", - DIRECTORY_CONTENT_ERROR: "A directory cannot have content", - FILE_NOT_FOUND: "File not found: %s", - NOT_IMPLEMENTED: "Not implemented", - INVALID_FILENAME: "Invalid filename", - INVALID_FORMAT: "Invalid or unsupported zip format. No END header found" - }; - } -}); - -// node_modules/adm-zip/util/fattr.js -var require_fattr = __commonJS({ - "node_modules/adm-zip/util/fattr.js"(exports, module2) { - var fs2 = require_fileSystem().require(); - var pth = require("path"); - fs2.existsSync = fs2.existsSync || pth.existsSync; - module2.exports = function(path2) { - var _path = path2 || "", _obj = newAttr(), _stat = null; - function newAttr() { - return { - directory: false, - readonly: false, - hidden: false, - executable: false, - mtime: 0, - atime: 0 - }; - } - if (_path && fs2.existsSync(_path)) { - _stat = fs2.statSync(_path); - _obj.directory = _stat.isDirectory(); - _obj.mtime = _stat.mtime; - _obj.atime = _stat.atime; - _obj.executable = (73 & _stat.mode) !== 0; - _obj.readonly = (128 & _stat.mode) === 0; - _obj.hidden = pth.basename(_path)[0] === "."; - } else { - console.warn("Invalid path: " + _path); - } - return { - get directory() { - return _obj.directory; - }, - get readOnly() { - return _obj.readonly; - }, - get hidden() { - return _obj.hidden; - }, - get mtime() { - return _obj.mtime; - }, - get atime() { - return _obj.atime; - }, - get executable() { - return _obj.executable; - }, - decodeAttributes: function() { - }, - encodeAttributes: function() { - }, - toJSON: function() { - return { - path: _path, - isDirectory: _obj.directory, - isReadOnly: _obj.readonly, - isHidden: _obj.hidden, - isExecutable: _obj.executable, - mTime: _obj.mtime, - aTime: _obj.atime - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/util/index.js -var require_util = __commonJS({ - "node_modules/adm-zip/util/index.js"(exports, module2) { - module2.exports = require_utils(); - module2.exports.Constants = require_constants(); - module2.exports.Errors = require_errors(); - module2.exports.FileAttr = require_fattr(); - } -}); - -// node_modules/adm-zip/headers/entryHeader.js -var require_entryHeader = __commonJS({ - "node_modules/adm-zip/headers/entryHeader.js"(exports, module2) { - var Utils = require_util(); - var Constants = Utils.Constants; - module2.exports = function() { - var _verMade = 20, _version = 10, _flags = 0, _method = 0, _time = 0, _crc = 0, _compressedSize = 0, _size = 0, _fnameLen = 0, _extraLen = 0, _comLen = 0, _diskStart = 0, _inattr = 0, _attr = 0, _offset = 0; - _verMade |= Utils.isWin ? 2560 : 768; - _flags |= Constants.FLG_EFS; - var _dataHeader = {}; - function setTime(val) { - val = new Date(val); - _time = (val.getFullYear() - 1980 & 127) << 25 | val.getMonth() + 1 << 21 | val.getDate() << 16 | val.getHours() << 11 | val.getMinutes() << 5 | val.getSeconds() >> 1; - } - setTime(+new Date()); - return { - get made() { - return _verMade; - }, - set made(val) { - _verMade = val; - }, - get version() { - return _version; - }, - set version(val) { - _version = val; - }, - get flags() { - return _flags; - }, - set flags(val) { - _flags = val; - }, - get method() { - return _method; - }, - set method(val) { - switch (val) { - case Constants.STORED: - this.version = 10; - case Constants.DEFLATED: - default: - this.version = 20; - } - _method = val; - }, - get time() { - return new Date((_time >> 25 & 127) + 1980, (_time >> 21 & 15) - 1, _time >> 16 & 31, _time >> 11 & 31, _time >> 5 & 63, (_time & 31) << 1); - }, - set time(val) { - setTime(val); - }, - get crc() { - return _crc; - }, - set crc(val) { - _crc = Math.max(0, val) >>> 0; - }, - get compressedSize() { - return _compressedSize; - }, - set compressedSize(val) { - _compressedSize = Math.max(0, val) >>> 0; - }, - get size() { - return _size; - }, - set size(val) { - _size = Math.max(0, val) >>> 0; - }, - get fileNameLength() { - return _fnameLen; - }, - set fileNameLength(val) { - _fnameLen = val; - }, - get extraLength() { - return _extraLen; - }, - set extraLength(val) { - _extraLen = val; - }, - get commentLength() { - return _comLen; - }, - set commentLength(val) { - _comLen = val; - }, - get diskNumStart() { - return _diskStart; - }, - set diskNumStart(val) { - _diskStart = Math.max(0, val) >>> 0; - }, - get inAttr() { - return _inattr; - }, - set inAttr(val) { - _inattr = Math.max(0, val) >>> 0; - }, - get attr() { - return _attr; - }, - set attr(val) { - _attr = Math.max(0, val) >>> 0; - }, - get fileAttr() { - return _attr ? (_attr >>> 0 | 0) >> 16 & 4095 : 0; - }, - get offset() { - return _offset; - }, - set offset(val) { - _offset = Math.max(0, val) >>> 0; - }, - get encripted() { - return (_flags & 1) === 1; - }, - get entryHeaderSize() { - return Constants.CENHDR + _fnameLen + _extraLen + _comLen; - }, - get realDataOffset() { - return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; - }, - get dataHeader() { - return _dataHeader; - }, - loadDataHeaderFromBinary: function(input) { - var data = input.slice(_offset, _offset + Constants.LOCHDR); - if (data.readUInt32LE(0) !== Constants.LOCSIG) { - throw new Error(Utils.Errors.INVALID_LOC); - } - _dataHeader = { - version: data.readUInt16LE(Constants.LOCVER), - flags: data.readUInt16LE(Constants.LOCFLG), - method: data.readUInt16LE(Constants.LOCHOW), - time: data.readUInt32LE(Constants.LOCTIM), - crc: data.readUInt32LE(Constants.LOCCRC), - compressedSize: data.readUInt32LE(Constants.LOCSIZ), - size: data.readUInt32LE(Constants.LOCLEN), - fnameLen: data.readUInt16LE(Constants.LOCNAM), - extraLen: data.readUInt16LE(Constants.LOCEXT) - }; - }, - loadFromBinary: function(data) { - if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) { - throw new Error(Utils.Errors.INVALID_CEN); - } - _verMade = data.readUInt16LE(Constants.CENVEM); - _version = data.readUInt16LE(Constants.CENVER); - _flags = data.readUInt16LE(Constants.CENFLG); - _method = data.readUInt16LE(Constants.CENHOW); - _time = data.readUInt32LE(Constants.CENTIM); - _crc = data.readUInt32LE(Constants.CENCRC); - _compressedSize = data.readUInt32LE(Constants.CENSIZ); - _size = data.readUInt32LE(Constants.CENLEN); - _fnameLen = data.readUInt16LE(Constants.CENNAM); - _extraLen = data.readUInt16LE(Constants.CENEXT); - _comLen = data.readUInt16LE(Constants.CENCOM); - _diskStart = data.readUInt16LE(Constants.CENDSK); - _inattr = data.readUInt16LE(Constants.CENATT); - _attr = data.readUInt32LE(Constants.CENATX); - _offset = data.readUInt32LE(Constants.CENOFF); - }, - dataHeaderToBinary: function() { - var data = Buffer.alloc(Constants.LOCHDR); - data.writeUInt32LE(Constants.LOCSIG, 0); - data.writeUInt16LE(_version, Constants.LOCVER); - data.writeUInt16LE(_flags, Constants.LOCFLG); - data.writeUInt16LE(_method, Constants.LOCHOW); - data.writeUInt32LE(_time, Constants.LOCTIM); - data.writeUInt32LE(_crc, Constants.LOCCRC); - data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); - data.writeUInt32LE(_size, Constants.LOCLEN); - data.writeUInt16LE(_fnameLen, Constants.LOCNAM); - data.writeUInt16LE(_extraLen, Constants.LOCEXT); - return data; - }, - entryHeaderToBinary: function() { - var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); - data.writeUInt32LE(Constants.CENSIG, 0); - data.writeUInt16LE(_verMade, Constants.CENVEM); - data.writeUInt16LE(_version, Constants.CENVER); - data.writeUInt16LE(_flags, Constants.CENFLG); - data.writeUInt16LE(_method, Constants.CENHOW); - data.writeUInt32LE(_time, Constants.CENTIM); - data.writeUInt32LE(_crc, Constants.CENCRC); - data.writeUInt32LE(_compressedSize, Constants.CENSIZ); - data.writeUInt32LE(_size, Constants.CENLEN); - data.writeUInt16LE(_fnameLen, Constants.CENNAM); - data.writeUInt16LE(_extraLen, Constants.CENEXT); - data.writeUInt16LE(_comLen, Constants.CENCOM); - data.writeUInt16LE(_diskStart, Constants.CENDSK); - data.writeUInt16LE(_inattr, Constants.CENATT); - data.writeUInt32LE(_attr, Constants.CENATX); - data.writeUInt32LE(_offset, Constants.CENOFF); - data.fill(0, Constants.CENHDR); - return data; - }, - toJSON: function() { - const bytes = function(nr) { - return nr + " bytes"; - }; - return { - made: _verMade, - version: _version, - flags: _flags, - method: Utils.methodToString(_method), - time: this.time, - crc: "0x" + _crc.toString(16).toUpperCase(), - compressedSize: bytes(_compressedSize), - size: bytes(_size), - fileNameLength: bytes(_fnameLen), - extraLength: bytes(_extraLen), - commentLength: bytes(_comLen), - diskNumStart: _diskStart, - inAttr: _inattr, - attr: _attr, - offset: _offset, - entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen) - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/headers/mainHeader.js -var require_mainHeader = __commonJS({ - "node_modules/adm-zip/headers/mainHeader.js"(exports, module2) { - var Utils = require_util(); - var Constants = Utils.Constants; - module2.exports = function() { - var _volumeEntries = 0, _totalEntries = 0, _size = 0, _offset = 0, _commentLength = 0; - return { - get diskEntries() { - return _volumeEntries; - }, - set diskEntries(val) { - _volumeEntries = _totalEntries = val; - }, - get totalEntries() { - return _totalEntries; - }, - set totalEntries(val) { - _totalEntries = _volumeEntries = val; - }, - get size() { - return _size; - }, - set size(val) { - _size = val; - }, - get offset() { - return _offset; - }, - set offset(val) { - _offset = val; - }, - get commentLength() { - return _commentLength; - }, - set commentLength(val) { - _commentLength = val; - }, - get mainHeaderSize() { - return Constants.ENDHDR + _commentLength; - }, - loadFromBinary: function(data) { - if ((data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) && (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)) { - throw new Error(Utils.Errors.INVALID_END); - } - if (data.readUInt32LE(0) === Constants.ENDSIG) { - _volumeEntries = data.readUInt16LE(Constants.ENDSUB); - _totalEntries = data.readUInt16LE(Constants.ENDTOT); - _size = data.readUInt32LE(Constants.ENDSIZ); - _offset = data.readUInt32LE(Constants.ENDOFF); - _commentLength = data.readUInt16LE(Constants.ENDCOM); - } else { - _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB); - _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT); - _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ); - _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF); - _commentLength = 0; - } - }, - toBinary: function() { - var b = Buffer.alloc(Constants.ENDHDR + _commentLength); - b.writeUInt32LE(Constants.ENDSIG, 0); - b.writeUInt32LE(0, 4); - b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); - b.writeUInt16LE(_totalEntries, Constants.ENDTOT); - b.writeUInt32LE(_size, Constants.ENDSIZ); - b.writeUInt32LE(_offset, Constants.ENDOFF); - b.writeUInt16LE(_commentLength, Constants.ENDCOM); - b.fill(" ", Constants.ENDHDR); - return b; - }, - toJSON: function() { - const offset = function(nr, len) { - let offs = nr.toString(16).toUpperCase(); - while (offs.length < len) - offs = "0" + offs; - return "0x" + offs; - }; - return { - diskEntries: _volumeEntries, - totalEntries: _totalEntries, - size: _size + " bytes", - offset: offset(_offset, 4), - commentLength: _commentLength - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/headers/index.js -var require_headers = __commonJS({ - "node_modules/adm-zip/headers/index.js"(exports) { - exports.EntryHeader = require_entryHeader(); - exports.MainHeader = require_mainHeader(); - } -}); - -// node_modules/adm-zip/methods/deflater.js -var require_deflater = __commonJS({ - "node_modules/adm-zip/methods/deflater.js"(exports, module2) { - module2.exports = function(inbuf) { - var zlib = require("zlib"); - var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 }; - return { - deflate: function() { - return zlib.deflateRawSync(inbuf, opts); - }, - deflateAsync: function(callback) { - var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0; - tmp.on("data", function(data) { - parts.push(data); - total += data.length; - }); - tmp.on("end", function() { - var buf = Buffer.alloc(total), written = 0; - buf.fill(0); - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - }; - }; - } -}); - -// node_modules/adm-zip/methods/inflater.js -var require_inflater = __commonJS({ - "node_modules/adm-zip/methods/inflater.js"(exports, module2) { - module2.exports = function(inbuf) { - var zlib = require("zlib"); - return { - inflate: function() { - return zlib.inflateRawSync(inbuf); - }, - inflateAsync: function(callback) { - var tmp = zlib.createInflateRaw(), parts = [], total = 0; - tmp.on("data", function(data) { - parts.push(data); - total += data.length; - }); - tmp.on("end", function() { - var buf = Buffer.alloc(total), written = 0; - buf.fill(0); - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - }; - }; - } -}); - -// node_modules/adm-zip/methods/zipcrypto.js -var require_zipcrypto = __commonJS({ - "node_modules/adm-zip/methods/zipcrypto.js"(exports, module2) { - "use strict"; - var { randomFillSync } = require("crypto"); - var crctable = new Uint32Array(256).map((t, crc) => { - for (let j = 0; j < 8; j++) { - if ((crc & 1) !== 0) { - crc = crc >>> 1 ^ 3988292384; - } else { - crc >>>= 1; - } - } - return crc >>> 0; - }); - var uMul = (a, b) => Math.imul(a, b) >>> 0; - var crc32update = (pCrc32, bval) => { - return crctable[(pCrc32 ^ bval) & 255] ^ pCrc32 >>> 8; - }; - var genSalt = () => { - if (typeof randomFillSync === "function") { - return randomFillSync(Buffer.alloc(12)); - } else { - return genSalt.node(); - } - }; - genSalt.node = () => { - const salt = Buffer.alloc(12); - const len = salt.length; - for (let i = 0; i < len; i++) - salt[i] = Math.random() * 256 & 255; - return salt; - }; - var config = { - genSalt - }; - function Initkeys(pw) { - const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw); - this.keys = new Uint32Array([305419896, 591751049, 878082192]); - for (let i = 0; i < pass.length; i++) { - this.updateKeys(pass[i]); - } - } - Initkeys.prototype.updateKeys = function(byteValue) { - const keys = this.keys; - keys[0] = crc32update(keys[0], byteValue); - keys[1] += keys[0] & 255; - keys[1] = uMul(keys[1], 134775813) + 1; - keys[2] = crc32update(keys[2], keys[1] >>> 24); - return byteValue; - }; - Initkeys.prototype.next = function() { - const k = (this.keys[2] | 2) >>> 0; - return uMul(k, k ^ 1) >> 8 & 255; - }; - function make_decrypter(pwd) { - const keys = new Initkeys(pwd); - return function(data) { - const result = Buffer.alloc(data.length); - let pos = 0; - for (let c of data) { - result[pos++] = keys.updateKeys(c ^ keys.next()); - } - return result; - }; - } - function make_encrypter(pwd) { - const keys = new Initkeys(pwd); - return function(data, result, pos = 0) { - if (!result) - result = Buffer.alloc(data.length); - for (let c of data) { - const k = keys.next(); - result[pos++] = c ^ k; - keys.updateKeys(c); - } - return result; - }; - } - function decrypt(data, header, pwd) { - if (!data || !Buffer.isBuffer(data) || data.length < 12) { - return Buffer.alloc(0); - } - const decrypter = make_decrypter(pwd); - const salt = decrypter(data.slice(0, 12)); - if (salt[11] !== header.crc >>> 24) { - throw "ADM-ZIP: Wrong Password"; - } - return decrypter(data.slice(12)); - } - function _salter(data) { - if (Buffer.isBuffer(data) && data.length >= 12) { - config.genSalt = function() { - return data.slice(0, 12); - }; - } else if (data === "node") { - config.genSalt = genSalt.node; - } else { - config.genSalt = genSalt; - } - } - function encrypt(data, header, pwd, oldlike = false) { - if (data == null) - data = Buffer.alloc(0); - if (!Buffer.isBuffer(data)) - data = Buffer.from(data.toString()); - const encrypter = make_encrypter(pwd); - const salt = config.genSalt(); - salt[11] = header.crc >>> 24 & 255; - if (oldlike) - salt[10] = header.crc >>> 16 & 255; - const result = Buffer.alloc(data.length + 12); - encrypter(salt, result); - return encrypter(data, result, 12); - } - module2.exports = { decrypt, encrypt, _salter }; - } -}); - -// node_modules/adm-zip/methods/index.js -var require_methods = __commonJS({ - "node_modules/adm-zip/methods/index.js"(exports) { - exports.Deflater = require_deflater(); - exports.Inflater = require_inflater(); - exports.ZipCrypto = require_zipcrypto(); - } -}); - -// node_modules/adm-zip/zipEntry.js -var require_zipEntry = __commonJS({ - "node_modules/adm-zip/zipEntry.js"(exports, module2) { - var Utils = require_util(); - var Headers = require_headers(); - var Constants = Utils.Constants; - var Methods = require_methods(); - module2.exports = function(input) { - var _entryHeader = new Headers.EntryHeader(), _entryName = Buffer.alloc(0), _comment = Buffer.alloc(0), _isDirectory = false, uncompressedData = null, _extra = Buffer.alloc(0); - function getCompressedDataFromZip() { - if (!input || !Buffer.isBuffer(input)) { - return Buffer.alloc(0); - } - _entryHeader.loadDataHeaderFromBinary(input); - return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize); - } - function crc32OK(data) { - if ((_entryHeader.flags & 8) !== 8) { - if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) { - return false; - } - } else { - } - return true; - } - function decompress(async, callback, pass) { - if (typeof callback === "undefined" && typeof async === "string") { - pass = async; - async = void 0; - } - if (_isDirectory) { - if (async && callback) { - callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); - } - return Buffer.alloc(0); - } - var compressedData = getCompressedDataFromZip(); - if (compressedData.length === 0) { - if (async && callback) - callback(compressedData); - return compressedData; - } - if (_entryHeader.encripted) { - if (typeof pass !== "string" && !Buffer.isBuffer(pass)) { - throw new Error("ADM-ZIP: Incompatible password parameter"); - } - compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass); - } - var data = Buffer.alloc(_entryHeader.size); - switch (_entryHeader.method) { - case Utils.Constants.STORED: - compressedData.copy(data); - if (!crc32OK(data)) { - if (async && callback) - callback(data, Utils.Errors.BAD_CRC); - throw new Error(Utils.Errors.BAD_CRC); - } else { - if (async && callback) - callback(data); - return data; - } - case Utils.Constants.DEFLATED: - var inflater = new Methods.Inflater(compressedData); - if (!async) { - const result = inflater.inflate(data); - result.copy(data, 0); - if (!crc32OK(data)) { - throw new Error(Utils.Errors.BAD_CRC + " " + _entryName.toString()); - } - return data; - } else { - inflater.inflateAsync(function(result) { - result.copy(result, 0); - if (callback) { - if (!crc32OK(result)) { - callback(result, Utils.Errors.BAD_CRC); - } else { - callback(result); - } - } - }); - } - break; - default: - if (async && callback) - callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD); - throw new Error(Utils.Errors.UNKNOWN_METHOD); - } - } - function compress(async, callback) { - if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { - if (async && callback) - callback(getCompressedDataFromZip()); - return getCompressedDataFromZip(); - } - if (uncompressedData.length && !_isDirectory) { - var compressedData; - switch (_entryHeader.method) { - case Utils.Constants.STORED: - _entryHeader.compressedSize = _entryHeader.size; - compressedData = Buffer.alloc(uncompressedData.length); - uncompressedData.copy(compressedData); - if (async && callback) - callback(compressedData); - return compressedData; - default: - case Utils.Constants.DEFLATED: - var deflater = new Methods.Deflater(uncompressedData); - if (!async) { - var deflated = deflater.deflate(); - _entryHeader.compressedSize = deflated.length; - return deflated; - } else { - deflater.deflateAsync(function(data) { - compressedData = Buffer.alloc(data.length); - _entryHeader.compressedSize = data.length; - data.copy(compressedData); - callback && callback(compressedData); - }); - } - deflater = null; - break; - } - } else if (async && callback) { - callback(Buffer.alloc(0)); - } else { - return Buffer.alloc(0); - } - } - function readUInt64LE(buffer, offset) { - return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset); - } - function parseExtra(data) { - var offset = 0; - var signature, size, part; - while (offset < data.length) { - signature = data.readUInt16LE(offset); - offset += 2; - size = data.readUInt16LE(offset); - offset += 2; - part = data.slice(offset, offset + size); - offset += size; - if (Constants.ID_ZIP64 === signature) { - parseZip64ExtendedInformation(part); - } - } - } - function parseZip64ExtendedInformation(data) { - var size, compressedSize, offset, diskNumStart; - if (data.length >= Constants.EF_ZIP64_SCOMP) { - size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP); - if (_entryHeader.size === Constants.EF_ZIP64_OR_32) { - _entryHeader.size = size; - } - } - if (data.length >= Constants.EF_ZIP64_RHO) { - compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP); - if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) { - _entryHeader.compressedSize = compressedSize; - } - } - if (data.length >= Constants.EF_ZIP64_DSN) { - offset = readUInt64LE(data, Constants.EF_ZIP64_RHO); - if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) { - _entryHeader.offset = offset; - } - } - if (data.length >= Constants.EF_ZIP64_DSN + 4) { - diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN); - if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) { - _entryHeader.diskNumStart = diskNumStart; - } - } - } - return { - get entryName() { - return _entryName.toString(); - }, - get rawEntryName() { - return _entryName; - }, - set entryName(val) { - _entryName = Utils.toBuffer(val); - var lastChar = _entryName[_entryName.length - 1]; - _isDirectory = lastChar === 47 || lastChar === 92; - _entryHeader.fileNameLength = _entryName.length; - }, - get extra() { - return _extra; - }, - set extra(val) { - _extra = val; - _entryHeader.extraLength = val.length; - parseExtra(val); - }, - get comment() { - return _comment.toString(); - }, - set comment(val) { - _comment = Utils.toBuffer(val); - _entryHeader.commentLength = _comment.length; - }, - get name() { - var n = _entryName.toString(); - return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); - }, - get isDirectory() { - return _isDirectory; - }, - getCompressedData: function() { - return compress(false, null); - }, - getCompressedDataAsync: function(callback) { - compress(true, callback); - }, - setData: function(value) { - uncompressedData = Utils.toBuffer(value); - if (!_isDirectory && uncompressedData.length) { - _entryHeader.size = uncompressedData.length; - _entryHeader.method = Utils.Constants.DEFLATED; - _entryHeader.crc = Utils.crc32(value); - _entryHeader.changed = true; - } else { - _entryHeader.method = Utils.Constants.STORED; - } - }, - getData: function(pass) { - if (_entryHeader.changed) { - return uncompressedData; - } else { - return decompress(false, null, pass); - } - }, - getDataAsync: function(callback, pass) { - if (_entryHeader.changed) { - callback(uncompressedData); - } else { - decompress(true, callback, pass); - } - }, - set attr(attr) { - _entryHeader.attr = attr; - }, - get attr() { - return _entryHeader.attr; - }, - set header(data) { - _entryHeader.loadFromBinary(data); - }, - get header() { - return _entryHeader; - }, - packHeader: function() { - var header = _entryHeader.entryHeaderToBinary(); - var addpos = Utils.Constants.CENHDR; - _entryName.copy(header, addpos); - addpos += _entryName.length; - if (_entryHeader.extraLength) { - _extra.copy(header, addpos); - addpos += _entryHeader.extraLength; - } - if (_entryHeader.commentLength) { - _comment.copy(header, addpos); - } - return header; - }, - toJSON: function() { - const bytes = function(nr) { - return "<" + (nr && nr.length + " bytes buffer" || "null") + ">"; - }; - return { - entryName: this.entryName, - name: this.name, - comment: this.comment, - isDirectory: this.isDirectory, - header: _entryHeader.toJSON(), - compressedData: bytes(input), - data: bytes(uncompressedData) - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/zipFile.js -var require_zipFile = __commonJS({ - "node_modules/adm-zip/zipFile.js"(exports, module2) { - var ZipEntry = require_zipEntry(); - var Headers = require_headers(); - var Utils = require_util(); - module2.exports = function(inBuffer, options) { - var entryList = [], entryTable = {}, _comment = Buffer.alloc(0), mainHeader = new Headers.MainHeader(), loadedEntries = false; - const opts = Object.assign(/* @__PURE__ */ Object.create(null), options); - const { noSort } = opts; - if (inBuffer) { - readMainHeader(opts.readEntries); - } else { - loadedEntries = true; - } - function iterateEntries(callback) { - const totalEntries = mainHeader.diskEntries; - let index = mainHeader.offset; - for (let i = 0; i < totalEntries; i++) { - let tmp = index; - const entry = new ZipEntry(inBuffer); - entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); - entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); - index += entry.header.entryHeaderSize; - callback(entry); - } - } - function readEntries() { - loadedEntries = true; - entryTable = {}; - entryList = new Array(mainHeader.diskEntries); - var index = mainHeader.offset; - for (var i = 0; i < entryList.length; i++) { - var tmp = index, entry = new ZipEntry(inBuffer); - entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); - entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); - if (entry.header.extraLength) { - entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); - } - if (entry.header.commentLength) - entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); - index += entry.header.entryHeaderSize; - entryList[i] = entry; - entryTable[entry.entryName] = entry; - } - } - function readMainHeader(readNow) { - var i = inBuffer.length - Utils.Constants.ENDHDR, max = Math.max(0, i - 65535), n = max, endStart = inBuffer.length, endOffset = -1, commentEnd = 0; - for (i; i >= n; i--) { - if (inBuffer[i] !== 80) - continue; - if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { - endOffset = i; - commentEnd = i; - endStart = i + Utils.Constants.ENDHDR; - n = i - Utils.Constants.END64HDR; - continue; - } - if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) { - n = max; - continue; - } - if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) { - endOffset = i; - endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD; - break; - } - } - if (!~endOffset) - throw new Error(Utils.Errors.INVALID_FORMAT); - mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart)); - if (mainHeader.commentLength) { - _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR); - } - if (readNow) - readEntries(); - } - function sortEntries() { - if (entryList.length > 1 && !noSort) { - entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase())); - } - } - return { - get entries() { - if (!loadedEntries) { - readEntries(); - } - return entryList; - }, - get comment() { - return _comment.toString(); - }, - set comment(val) { - _comment = Utils.toBuffer(val); - mainHeader.commentLength = _comment.length; - }, - getEntryCount: function() { - if (!loadedEntries) { - return mainHeader.diskEntries; - } - return entryList.length; - }, - forEach: function(callback) { - if (!loadedEntries) { - iterateEntries(callback); - return; - } - entryList.forEach(callback); - }, - getEntry: function(entryName) { - if (!loadedEntries) { - readEntries(); - } - return entryTable[entryName] || null; - }, - setEntry: function(entry) { - if (!loadedEntries) { - readEntries(); - } - entryList.push(entry); - entryTable[entry.entryName] = entry; - mainHeader.totalEntries = entryList.length; - }, - deleteEntry: function(entryName) { - if (!loadedEntries) { - readEntries(); - } - var entry = entryTable[entryName]; - if (entry && entry.isDirectory) { - var _self = this; - this.getEntryChildren(entry).forEach(function(child) { - if (child.entryName !== entryName) { - _self.deleteEntry(child.entryName); - } - }); - } - entryList.splice(entryList.indexOf(entry), 1); - delete entryTable[entryName]; - mainHeader.totalEntries = entryList.length; - }, - getEntryChildren: function(entry) { - if (!loadedEntries) { - readEntries(); - } - if (entry && entry.isDirectory) { - const list = []; - const name = entry.entryName; - const len = name.length; - entryList.forEach(function(zipEntry) { - if (zipEntry.entryName.substr(0, len) === name) { - list.push(zipEntry); - } - }); - return list; - } - return []; - }, - compressToBuffer: function() { - if (!loadedEntries) { - readEntries(); - } - sortEntries(); - const dataBlock = []; - const entryHeaders = []; - let totalSize = 0; - let dindex = 0; - mainHeader.size = 0; - mainHeader.offset = 0; - for (const entry of entryList) { - const compressedData = entry.getCompressedData(); - entry.header.offset = dindex; - const dataHeader = entry.header.dataHeaderToBinary(); - const entryNameLen = entry.rawEntryName.length; - const postHeader = Buffer.alloc(entryNameLen + entry.extra.length); - entry.rawEntryName.copy(postHeader, 0); - postHeader.copy(entry.extra, entryNameLen); - const dataLength = dataHeader.length + postHeader.length + compressedData.length; - dindex += dataLength; - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - const entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += dataLength + entryHeader.length; - } - totalSize += mainHeader.mainHeaderSize; - mainHeader.offset = dindex; - dindex = 0; - const outBuffer = Buffer.alloc(totalSize); - for (const content of dataBlock) { - content.copy(outBuffer, dindex); - dindex += content.length; - } - for (const content of entryHeaders) { - content.copy(outBuffer, dindex); - dindex += content.length; - } - const mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); - } - mh.copy(outBuffer, dindex); - return outBuffer; - }, - toAsyncBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) { - try { - if (!loadedEntries) { - readEntries(); - } - sortEntries(); - const dataBlock = []; - const entryHeaders = []; - let totalSize = 0; - let dindex = 0; - mainHeader.size = 0; - mainHeader.offset = 0; - const compress2Buffer = function(entryLists) { - if (entryLists.length) { - const entry = entryLists.pop(); - const name = entry.entryName + entry.extra.toString(); - if (onItemStart) - onItemStart(name); - entry.getCompressedDataAsync(function(compressedData) { - if (onItemEnd) - onItemEnd(name); - entry.header.offset = dindex; - const dataHeader = entry.header.dataHeaderToBinary(); - const postHeader = Buffer.alloc(name.length, name); - const dataLength = dataHeader.length + postHeader.length + compressedData.length; - dindex += dataLength; - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - const entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += dataLength + entryHeader.length; - compress2Buffer(entryLists); - }); - } else { - totalSize += mainHeader.mainHeaderSize; - mainHeader.offset = dindex; - dindex = 0; - const outBuffer = Buffer.alloc(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); - dindex += content.length; - }); - entryHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); - dindex += content.length; - }); - const mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); - } - mh.copy(outBuffer, dindex); - onSuccess(outBuffer); - } - }; - compress2Buffer(entryList); - } catch (e) { - onFail(e); - } - } - }; - }; - } -}); - -// node_modules/adm-zip/adm-zip.js -var require_adm_zip = __commonJS({ - "node_modules/adm-zip/adm-zip.js"(exports, module2) { - var Utils = require_util(); - var pth = require("path"); - var ZipEntry = require_zipEntry(); - var ZipFile = require_zipFile(); - var get_Bool = (val, def) => typeof val === "boolean" ? val : def; - var get_Str = (val, def) => typeof val === "string" ? val : def; - var defaultOptions = { - noSort: false, - readEntries: false, - method: Utils.Constants.NONE, - fs: null - }; - module2.exports = function(input, options) { - let inBuffer = null; - const opts = Object.assign(/* @__PURE__ */ Object.create(null), defaultOptions); - if (input && typeof input === "object") { - if (!(input instanceof Uint8Array)) { - Object.assign(opts, input); - input = opts.input ? opts.input : void 0; - if (opts.input) - delete opts.input; - } - if (Buffer.isBuffer(input)) { - inBuffer = input; - opts.method = Utils.Constants.BUFFER; - input = void 0; - } - } - Object.assign(opts, options); - const filetools = new Utils(opts); - if (input && typeof input === "string") { - if (filetools.fs.existsSync(input)) { - opts.method = Utils.Constants.FILE; - opts.filename = input; - inBuffer = filetools.fs.readFileSync(input); - } else { - throw new Error(Utils.Errors.INVALID_FILENAME); - } - } - const _zip = new ZipFile(inBuffer, opts); - const { canonical, sanitize } = Utils; - function getEntry(entry) { - if (entry && _zip) { - var item; - if (typeof entry === "string") - item = _zip.getEntry(entry); - if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") - item = _zip.getEntry(entry.entryName); - if (item) { - return item; - } - } - return null; - } - function fixPath(zipPath) { - const { join: join2, normalize, sep } = pth.posix; - return join2(".", normalize(sep + zipPath.split("\\").join(sep) + sep)); - } - return { - readFile: function(entry, pass) { - var item = getEntry(entry); - return item && item.getData(pass) || null; - }, - readFileAsync: function(entry, callback) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(callback); - } else { - callback(null, "getEntry failed for:" + entry); - } - }, - readAsText: function(entry, encoding) { - var item = getEntry(entry); - if (item) { - var data = item.getData(); - if (data && data.length) { - return data.toString(encoding || "utf8"); - } - } - return ""; - }, - readAsTextAsync: function(entry, callback, encoding) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(function(data, err) { - if (err) { - callback(data, err); - return; - } - if (data && data.length) { - callback(data.toString(encoding || "utf8")); - } else { - callback(""); - } - }); - } else { - callback(""); - } - }, - deleteFile: function(entry) { - var item = getEntry(entry); - if (item) { - _zip.deleteEntry(item.entryName); - } - }, - addZipComment: function(comment) { - _zip.comment = comment; - }, - getZipComment: function() { - return _zip.comment || ""; - }, - addZipEntryComment: function(entry, comment) { - var item = getEntry(entry); - if (item) { - item.comment = comment; - } - }, - getZipEntryComment: function(entry) { - var item = getEntry(entry); - if (item) { - return item.comment || ""; - } - return ""; - }, - updateFile: function(entry, content) { - var item = getEntry(entry); - if (item) { - item.setData(content); - } - }, - addLocalFile: function(localPath, zipPath, zipName, comment) { - if (filetools.fs.existsSync(localPath)) { - zipPath = zipPath ? fixPath(zipPath) : ""; - var p = localPath.split("\\").join("/").split("/").pop(); - zipPath += zipName ? zipName : p; - const _attr = filetools.fs.statSync(localPath); - this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr); - } else { - throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath)); - } - }, - addLocalFolder: function(localPath, zipPath, filter) { - if (filter instanceof RegExp) { - filter = function(rx) { - return function(filename) { - return rx.test(filename); - }; - }(filter); - } else if (typeof filter !== "function") { - filter = function() { - return true; - }; - } - zipPath = zipPath ? fixPath(zipPath) : ""; - localPath = pth.normalize(localPath); - if (filetools.fs.existsSync(localPath)) { - const items = filetools.findFiles(localPath); - const self = this; - if (items.length) { - items.forEach(function(filepath) { - var p = pth.relative(localPath, filepath).split("\\").join("/"); - if (filter(p)) { - var stats = filetools.fs.statSync(filepath); - if (stats.isFile()) { - self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), "", stats); - } else { - self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats); - } - } - }); - } - } else { - throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath)); - } - }, - addLocalFolderAsync: function(localPath, callback, zipPath, filter) { - if (filter instanceof RegExp) { - filter = function(rx) { - return function(filename) { - return rx.test(filename); - }; - }(filter); - } else if (typeof filter !== "function") { - filter = function() { - return true; - }; - } - zipPath = zipPath ? fixPath(zipPath) : ""; - localPath = pth.normalize(localPath); - var self = this; - filetools.fs.open(localPath, "r", function(err) { - if (err && err.code === "ENOENT") { - callback(void 0, Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath)); - } else if (err) { - callback(void 0, err); - } else { - var items = filetools.findFiles(localPath); - var i = -1; - var next = function() { - i += 1; - if (i < items.length) { - var filepath = items[i]; - var p = pth.relative(localPath, filepath).split("\\").join("/"); - p = p.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""); - if (filter(p)) { - filetools.fs.stat(filepath, function(er0, stats) { - if (er0) - callback(void 0, er0); - if (stats.isFile()) { - filetools.fs.readFile(filepath, function(er1, data) { - if (er1) { - callback(void 0, er1); - } else { - self.addFile(zipPath + p, data, "", stats); - next(); - } - }); - } else { - self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats); - next(); - } - }); - } else { - next(); - } - } else { - callback(true, void 0); - } - }; - next(); - } - }); - }, - addLocalFolderPromise: function(localPath, props) { - return new Promise((resolve, reject) => { - const { filter, zipPath } = Object.assign({}, props); - this.addLocalFolderAsync(localPath, (done, err) => { - if (err) - reject(err); - if (done) - resolve(this); - }, zipPath, filter); - }); - }, - addFile: function(entryName, content, comment, attr) { - let entry = getEntry(entryName); - const update = entry != null; - if (!update) { - entry = new ZipEntry(); - entry.entryName = entryName; - } - entry.comment = comment || ""; - const isStat = typeof attr === "object" && attr instanceof filetools.fs.Stats; - if (isStat) { - entry.header.time = attr.mtime; - } - var fileattr = entry.isDirectory ? 16 : 0; - if (!Utils.isWin) { - let unix = entry.isDirectory ? 16384 : 32768; - if (isStat) { - unix |= 4095 & attr.mode; - } else if (typeof attr === "number") { - unix |= 4095 & attr; - } else { - unix |= entry.isDirectory ? 493 : 420; - } - fileattr = (fileattr | unix << 16) >>> 0; - } - entry.attr = fileattr; - entry.setData(content); - if (!update) - _zip.setEntry(entry); - }, - getEntries: function() { - return _zip ? _zip.entries : []; - }, - getEntry: function(name) { - return getEntry(name); - }, - getEntryCount: function() { - return _zip.getEntryCount(); - }, - forEach: function(callback) { - return _zip.forEach(callback); - }, - extractEntryTo: function(entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) { - overwrite = get_Bool(overwrite, false); - keepOriginalPermission = get_Bool(keepOriginalPermission, false); - maintainEntryPath = get_Bool(maintainEntryPath, true); - outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, void 0)); - var item = getEntry(entry); - if (!item) { - throw new Error(Utils.Errors.NO_ENTRY); - } - var entryName = canonical(item.entryName); - var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName)); - if (item.isDirectory) { - var children = _zip.getEntryChildren(item); - children.forEach(function(child) { - if (child.isDirectory) - return; - var content2 = child.getData(); - if (!content2) { - throw new Error(Utils.Errors.CANT_EXTRACT_FILE); - } - var name = canonical(child.entryName); - var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name)); - const fileAttr2 = keepOriginalPermission ? child.header.fileAttr : void 0; - filetools.writeFileTo(childName, content2, overwrite, fileAttr2); - }); - return true; - } - var content = item.getData(); - if (!content) - throw new Error(Utils.Errors.CANT_EXTRACT_FILE); - if (filetools.fs.existsSync(target) && !overwrite) { - throw new Error(Utils.Errors.CANT_OVERRIDE); - } - const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - filetools.writeFileTo(target, content, overwrite, fileAttr); - return true; - }, - test: function(pass) { - if (!_zip) { - return false; - } - for (var entry in _zip.entries) { - try { - if (entry.isDirectory) { - continue; - } - var content = _zip.entries[entry].getData(pass); - if (!content) { - return false; - } - } catch (err) { - return false; - } - } - return true; - }, - extractAllTo: function(targetPath, overwrite, keepOriginalPermission, pass) { - overwrite = get_Bool(overwrite, false); - pass = get_Str(keepOriginalPermission, pass); - keepOriginalPermission = get_Bool(keepOriginalPermission, false); - if (!_zip) { - throw new Error(Utils.Errors.NO_ZIP); - } - _zip.entries.forEach(function(entry) { - var entryName = sanitize(targetPath, canonical(entry.entryName.toString())); - if (entry.isDirectory) { - filetools.makeDir(entryName); - return; - } - var content = entry.getData(pass); - if (!content) { - throw new Error(Utils.Errors.CANT_EXTRACT_FILE); - } - const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - filetools.writeFileTo(entryName, content, overwrite, fileAttr); - try { - filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time); - } catch (err) { - throw new Error(Utils.Errors.CANT_EXTRACT_FILE); - } - }); - }, - extractAllToAsync: function(targetPath, overwrite, keepOriginalPermission, callback) { - if (!callback) { - callback = function() { - }; - } - overwrite = get_Bool(overwrite, false); - if (typeof keepOriginalPermission === "function" && !callback) - callback = keepOriginalPermission; - keepOriginalPermission = get_Bool(keepOriginalPermission, false); - if (!_zip) { - callback(new Error(Utils.Errors.NO_ZIP)); - return; - } - targetPath = pth.resolve(targetPath); - const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString()))); - const getError = (msg, file) => new Error(msg + ': "' + file + '"'); - const dirEntries = []; - const fileEntries = /* @__PURE__ */ new Set(); - _zip.entries.forEach((e) => { - if (e.isDirectory) { - dirEntries.push(e); - } else { - fileEntries.add(e); - } - }); - for (const entry of dirEntries) { - const dirPath = getPath(entry); - const dirAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - try { - filetools.makeDir(dirPath); - if (dirAttr) - filetools.fs.chmodSync(dirPath, dirAttr); - filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time); - } catch (er) { - callback(getError("Unable to create folder", dirPath)); - } - } - const done = () => { - if (fileEntries.size === 0) { - callback(); - } - }; - for (const entry of fileEntries.values()) { - const entryName = pth.normalize(canonical(entry.entryName.toString())); - const filePath = sanitize(targetPath, entryName); - entry.getDataAsync(function(content, err_1) { - if (err_1) { - callback(new Error(err_1)); - return; - } - if (!content) { - callback(new Error(Utils.Errors.CANT_EXTRACT_FILE)); - } else { - const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function(succ) { - if (!succ) { - callback(getError("Unable to write file", filePath)); - return; - } - filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function(err_2) { - if (err_2) { - callback(getError("Unable to set times", filePath)); - return; - } - fileEntries.delete(entry); - done(); - }); - }); - } - }); - } - done(); - }, - writeZip: function(targetFileName, callback) { - if (arguments.length === 1) { - if (typeof targetFileName === "function") { - callback = targetFileName; - targetFileName = ""; - } - } - if (!targetFileName && opts.filename) { - targetFileName = opts.filename; - } - if (!targetFileName) - return; - var zipData = _zip.compressToBuffer(); - if (zipData) { - var ok = filetools.writeFileTo(targetFileName, zipData, true); - if (typeof callback === "function") - callback(!ok ? new Error("failed") : null, ""); - } - }, - writeZipPromise: function(targetFileName, props) { - const { overwrite, perm } = Object.assign({ overwrite: true }, props); - return new Promise((resolve, reject) => { - if (!targetFileName && opts.filename) - targetFileName = opts.filename; - if (!targetFileName) - reject("ADM-ZIP: ZIP File Name Missing"); - this.toBufferPromise().then((zipData) => { - const ret = (done) => done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file"); - filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret); - }, reject); - }); - }, - toBufferPromise: function() { - return new Promise((resolve, reject) => { - _zip.toAsyncBuffer(resolve, reject); - }); - }, - toBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) { - this.valueOf = 2; - if (typeof onSuccess === "function") { - _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd); - return null; - } - return _zip.compressToBuffer(); - } - }; - }; - } -}); - -// node_modules/ms/index.js -var require_ms = __commonJS({ - "node_modules/ms/index.js"(exports, module2) { - var s = 1e3; - var m = s * 60; - var h = m * 60; - var d = h * 24; - var w = d * 7; - var y = d * 365.25; - module2.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === "string" && val.length > 0) { - return parse(val); - } else if (type === "number" && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val)); - }; - function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || "ms").toLowerCase(); - switch (type) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n * y; - case "weeks": - case "week": - case "w": - return n * w; - case "days": - case "day": - case "d": - return n * d; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * h; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * m; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * s; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - default: - return void 0; - } - } - function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + "d"; - } - if (msAbs >= h) { - return Math.round(ms / h) + "h"; - } - if (msAbs >= m) { - return Math.round(ms / m) + "m"; - } - if (msAbs >= s) { - return Math.round(ms / s) + "s"; - } - return ms + "ms"; - } - function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, "day"); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, "hour"); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, "minute"); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, "second"); - } - return ms + " ms"; - } - function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); - } - } -}); - -// node_modules/debug/src/common.js -var require_common = __commonJS({ - "node_modules/debug/src/common.js"(exports, module2) { - function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require_ms(); - createDebug.destroy = destroy; - Object.keys(env).forEach((key) => { - createDebug[key] = env[key]; - }); - createDebug.names = []; - createDebug.skips = []; - createDebug.formatters = {}; - function selectColor(namespace) { - let hash = 0; - for (let i = 0; i < namespace.length; i++) { - hash = (hash << 5) - hash + namespace.charCodeAt(i); - hash |= 0; - } - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; - function debug(...args) { - if (!debug.enabled) { - return; - } - const self = debug; - const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - args[0] = createDebug.coerce(args[0]); - if (typeof args[0] !== "string") { - args.unshift("%O"); - } - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - if (match === "%%") { - return "%"; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === "function") { - const val = args[index]; - match = formatter.call(self, val); - args.splice(index, 1); - index--; - } - return match; - }); - createDebug.formatArgs.call(self, args); - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - debug.namespace = namespace; - debug.useColors = createDebug.useColors(); - debug.color = createDebug.selectColor(namespace); - debug.extend = extend; - debug.destroy = createDebug.destroy; - Object.defineProperty(debug, "enabled", { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } - return enabledCache; - }, - set: (v) => { - enableOverride = v; - } - }); - if (typeof createDebug.init === "function") { - createDebug.init(debug); - } - return debug; - } - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; - createDebug.names = []; - createDebug.skips = []; - let i; - const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); - const len = split.length; - for (i = 0; i < len; i++) { - if (!split[i]) { - continue; - } - namespaces = split[i].replace(/\*/g, ".*?"); - if (namespaces[0] === "-") { - createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$")); - } else { - createDebug.names.push(new RegExp("^" + namespaces + "$")); - } - } - } - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace) - ].join(","); - createDebug.enable(""); - return namespaces; - } - function enabled(name) { - if (name[name.length - 1] === "*") { - return true; - } - let i; - let len; - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - return false; - } - function toNamespace(regexp) { - return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*"); - } - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - function destroy() { - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - createDebug.enable(createDebug.load()); - return createDebug; - } - module2.exports = setup; - } -}); - -// node_modules/debug/src/browser.js -var require_browser = __commonJS({ - "node_modules/debug/src/browser.js"(exports, module2) { - exports.formatArgs = formatArgs; - exports.save = save; - exports.load = load; - exports.useColors = useColors; - exports.storage = localstorage(); - exports.destroy = (() => { - let warned = false; - return () => { - if (!warned) { - warned = true; - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - }; - })(); - exports.colors = [ - "#0000CC", - "#0000FF", - "#0033CC", - "#0033FF", - "#0066CC", - "#0066FF", - "#0099CC", - "#0099FF", - "#00CC00", - "#00CC33", - "#00CC66", - "#00CC99", - "#00CCCC", - "#00CCFF", - "#3300CC", - "#3300FF", - "#3333CC", - "#3333FF", - "#3366CC", - "#3366FF", - "#3399CC", - "#3399FF", - "#33CC00", - "#33CC33", - "#33CC66", - "#33CC99", - "#33CCCC", - "#33CCFF", - "#6600CC", - "#6600FF", - "#6633CC", - "#6633FF", - "#66CC00", - "#66CC33", - "#9900CC", - "#9900FF", - "#9933CC", - "#9933FF", - "#99CC00", - "#99CC33", - "#CC0000", - "#CC0033", - "#CC0066", - "#CC0099", - "#CC00CC", - "#CC00FF", - "#CC3300", - "#CC3333", - "#CC3366", - "#CC3399", - "#CC33CC", - "#CC33FF", - "#CC6600", - "#CC6633", - "#CC9900", - "#CC9933", - "#CCCC00", - "#CCCC33", - "#FF0000", - "#FF0033", - "#FF0066", - "#FF0099", - "#FF00CC", - "#FF00FF", - "#FF3300", - "#FF3333", - "#FF3366", - "#FF3399", - "#FF33CC", - "#FF33FF", - "#FF6600", - "#FF6633", - "#FF9900", - "#FF9933", - "#FFCC00", - "#FFCC33" - ]; - function useColors() { - if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) { - return true; - } - if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); - } - function formatArgs(args) { - args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff); - if (!this.useColors) { - return; - } - const c = "color: " + this.color; - args.splice(1, 0, c, "color: inherit"); - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, (match) => { - if (match === "%%") { - return; - } - index++; - if (match === "%c") { - lastC = index; - } - }); - args.splice(lastC, 0, c); - } - exports.log = console.debug || console.log || (() => { - }); - function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem("debug", namespaces); - } else { - exports.storage.removeItem("debug"); - } - } catch (error) { - } - } - function load() { - let r; - try { - r = exports.storage.getItem("debug"); - } catch (error) { - } - if (!r && typeof process !== "undefined" && "env" in process) { - r = process.env.DEBUG; - } - return r; - } - function localstorage() { - try { - return localStorage; - } catch (error) { - } - } - module2.exports = require_common()(exports); - var { formatters } = module2.exports; - formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (error) { - return "[UnexpectedJSONParseError]: " + error.message; - } - }; - } -}); - -// ../../node_modules/has-flag/index.js -var require_has_flag = __commonJS({ - "../../node_modules/has-flag/index.js"(exports, module2) { - "use strict"; - module2.exports = (flag, argv = process.argv) => { - const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--"; - const position = argv.indexOf(prefix + flag); - const terminatorPosition = argv.indexOf("--"); - return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); - }; - } -}); - -// ../../node_modules/supports-color/index.js -var require_supports_color = __commonJS({ - "../../node_modules/supports-color/index.js"(exports, module2) { - "use strict"; - var os = require("os"); - var tty = require("tty"); - var hasFlag = require_has_flag(); - var { env } = process; - var forceColor; - if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) { - forceColor = 0; - } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) { - forceColor = 1; - } - if ("FORCE_COLOR" in env) { - if (env.FORCE_COLOR === "true") { - forceColor = 1; - } else if (env.FORCE_COLOR === "false") { - forceColor = 0; - } else { - forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); - } - } - function translateLevel(level) { - if (level === 0) { - return false; - } - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; - } - function supportsColor(haveStream, streamIsTTY) { - if (forceColor === 0) { - return 0; - } - if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) { - return 3; - } - if (hasFlag("color=256")) { - return 2; - } - if (haveStream && !streamIsTTY && forceColor === void 0) { - return 0; - } - const min = forceColor || 0; - if (env.TERM === "dumb") { - return min; - } - if (process.platform === "win32") { - const osRelease = os.release().split("."); - if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } - return 1; - } - if ("CI" in env) { - if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env) || env.CI_NAME === "codeship") { - return 1; - } - return min; - } - if ("TEAMCITY_VERSION" in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; - } - if (env.COLORTERM === "truecolor") { - return 3; - } - if ("TERM_PROGRAM" in env) { - const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10); - switch (env.TERM_PROGRAM) { - case "iTerm.app": - return version >= 3 ? 3 : 2; - case "Apple_Terminal": - return 2; - } - } - if (/-256(color)?$/i.test(env.TERM)) { - return 2; - } - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { - return 1; - } - if ("COLORTERM" in env) { - return 1; - } - return min; - } - function getSupportLevel(stream) { - const level = supportsColor(stream, stream && stream.isTTY); - return translateLevel(level); - } - module2.exports = { - supportsColor: getSupportLevel, - stdout: translateLevel(supportsColor(true, tty.isatty(1))), - stderr: translateLevel(supportsColor(true, tty.isatty(2))) - }; - } -}); - -// node_modules/debug/src/node.js -var require_node = __commonJS({ - "node_modules/debug/src/node.js"(exports, module2) { - var tty = require("tty"); - var util = require("util"); - exports.init = init; - exports.log = log; - exports.formatArgs = formatArgs; - exports.save = save; - exports.load = load; - exports.useColors = useColors; - exports.destroy = util.deprecate(() => { - }, "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - exports.colors = [6, 2, 3, 4, 5, 1]; - try { - const supportsColor = require_supports_color(); - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } - } catch (error) { - } - exports.inspectOpts = Object.keys(process.env).filter((key) => { - return /^debug_/i.test(key); - }).reduce((obj, key) => { - const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === "null") { - val = null; - } else { - val = Number(val); - } - obj[prop] = val; - return obj; - }, {}); - function useColors() { - return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(process.stderr.fd); - } - function formatArgs(args) { - const { namespace: name, useColors: useColors2 } = this; - if (useColors2) { - const c = this.color; - const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c); - const prefix = ` ${colorCode};1m${name} \x1B[0m`; - args[0] = prefix + args[0].split("\n").join("\n" + prefix); - args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m"); - } else { - args[0] = getDate() + name + " " + args[0]; - } - } - function getDate() { - if (exports.inspectOpts.hideDate) { - return ""; - } - return new Date().toISOString() + " "; - } - function log(...args) { - return process.stderr.write(util.format(...args) + "\n"); - } - function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - delete process.env.DEBUG; - } - } - function load() { - return process.env.DEBUG; - } - function init(debug) { - debug.inspectOpts = {}; - const keys = Object.keys(exports.inspectOpts); - for (let i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } - } - module2.exports = require_common()(exports); - var { formatters } = module2.exports; - formatters.o = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" "); - }; - formatters.O = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); - }; - } -}); - -// node_modules/debug/src/index.js -var require_src = __commonJS({ - "node_modules/debug/src/index.js"(exports, module2) { - if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) { - module2.exports = require_browser(); - } else { - module2.exports = require_node(); - } - } -}); - -// node_modules/wrappy/wrappy.js -var require_wrappy = __commonJS({ - "node_modules/wrappy/wrappy.js"(exports, module2) { - module2.exports = wrappy; - function wrappy(fn, cb) { - if (fn && cb) - return wrappy(fn)(cb); - if (typeof fn !== "function") - throw new TypeError("need wrapper function"); - Object.keys(fn).forEach(function(k) { - wrapper[k] = fn[k]; - }); - return wrapper; - function wrapper() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - var ret = fn.apply(this, args); - var cb2 = args[args.length - 1]; - if (typeof ret === "function" && ret !== cb2) { - Object.keys(cb2).forEach(function(k) { - ret[k] = cb2[k]; - }); - } - return ret; - } - } - } -}); - -// node_modules/once/once.js -var require_once = __commonJS({ - "node_modules/once/once.js"(exports, module2) { - var wrappy = require_wrappy(); - module2.exports = wrappy(once); - module2.exports.strict = wrappy(onceStrict); - once.proto = once(function() { - Object.defineProperty(Function.prototype, "once", { - value: function() { - return once(this); - }, - configurable: true - }); - Object.defineProperty(Function.prototype, "onceStrict", { - value: function() { - return onceStrict(this); - }, - configurable: true - }); - }); - function once(fn) { - var f = function() { - if (f.called) - return f.value; - f.called = true; - return f.value = fn.apply(this, arguments); - }; - f.called = false; - return f; - } - function onceStrict(fn) { - var f = function() { - if (f.called) - throw new Error(f.onceError); - f.called = true; - return f.value = fn.apply(this, arguments); - }; - var name = fn.name || "Function wrapped with `once`"; - f.onceError = name + " shouldn't be called more than once"; - f.called = false; - return f; - } - } -}); - -// node_modules/end-of-stream/index.js -var require_end_of_stream = __commonJS({ - "node_modules/end-of-stream/index.js"(exports, module2) { - var once = require_once(); - var noop = function() { - }; - var isRequest = function(stream) { - return stream.setHeader && typeof stream.abort === "function"; - }; - var isChildProcess = function(stream) { - return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3; - }; - var eos = function(stream, opts, callback) { - if (typeof opts === "function") - return eos(stream, null, opts); - if (!opts) - opts = {}; - callback = once(callback || noop); - var ws = stream._writableState; - var rs = stream._readableState; - var readable = opts.readable || opts.readable !== false && stream.readable; - var writable = opts.writable || opts.writable !== false && stream.writable; - var cancelled = false; - var onlegacyfinish = function() { - if (!stream.writable) - onfinish(); - }; - var onfinish = function() { - writable = false; - if (!readable) - callback.call(stream); - }; - var onend = function() { - readable = false; - if (!writable) - callback.call(stream); - }; - var onexit = function(exitCode) { - callback.call(stream, exitCode ? new Error("exited with error code: " + exitCode) : null); - }; - var onerror = function(err) { - callback.call(stream, err); - }; - var onclose = function() { - process.nextTick(onclosenexttick); - }; - var onclosenexttick = function() { - if (cancelled) - return; - if (readable && !(rs && (rs.ended && !rs.destroyed))) - return callback.call(stream, new Error("premature close")); - if (writable && !(ws && (ws.ended && !ws.destroyed))) - return callback.call(stream, new Error("premature close")); - }; - var onrequest = function() { - stream.req.on("finish", onfinish); - }; - if (isRequest(stream)) { - stream.on("complete", onfinish); - stream.on("abort", onclose); - if (stream.req) - onrequest(); - else - stream.on("request", onrequest); - } else if (writable && !ws) { - stream.on("end", onlegacyfinish); - stream.on("close", onlegacyfinish); - } - if (isChildProcess(stream)) - stream.on("exit", onexit); - stream.on("end", onend); - stream.on("finish", onfinish); - if (opts.error !== false) - stream.on("error", onerror); - stream.on("close", onclose); - return function() { - cancelled = true; - stream.removeListener("complete", onfinish); - stream.removeListener("abort", onclose); - stream.removeListener("request", onrequest); - if (stream.req) - stream.req.removeListener("finish", onfinish); - stream.removeListener("end", onlegacyfinish); - stream.removeListener("close", onlegacyfinish); - stream.removeListener("finish", onfinish); - stream.removeListener("exit", onexit); - stream.removeListener("end", onend); - stream.removeListener("error", onerror); - stream.removeListener("close", onclose); - }; - }; - module2.exports = eos; - } -}); - -// node_modules/pump/index.js -var require_pump = __commonJS({ - "node_modules/pump/index.js"(exports, module2) { - var once = require_once(); - var eos = require_end_of_stream(); - var fs2 = require("fs"); - var noop = function() { - }; - var ancient = /^v?\.0/.test(process.version); - var isFn = function(fn) { - return typeof fn === "function"; - }; - var isFS = function(stream) { - if (!ancient) - return false; - if (!fs2) - return false; - return (stream instanceof (fs2.ReadStream || noop) || stream instanceof (fs2.WriteStream || noop)) && isFn(stream.close); - }; - var isRequest = function(stream) { - return stream.setHeader && isFn(stream.abort); - }; - var destroyer = function(stream, reading, writing, callback) { - callback = once(callback); - var closed = false; - stream.on("close", function() { - closed = true; - }); - eos(stream, { readable: reading, writable: writing }, function(err) { - if (err) - return callback(err); - closed = true; - callback(); - }); - var destroyed = false; - return function(err) { - if (closed) - return; - if (destroyed) - return; - destroyed = true; - if (isFS(stream)) - return stream.close(noop); - if (isRequest(stream)) - return stream.abort(); - if (isFn(stream.destroy)) - return stream.destroy(); - callback(err || new Error("stream was destroyed")); - }; - }; - var call = function(fn) { - fn(); - }; - var pipe = function(from, to) { - return from.pipe(to); - }; - var pump = function() { - var streams = Array.prototype.slice.call(arguments); - var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop; - if (Array.isArray(streams[0])) - streams = streams[0]; - if (streams.length < 2) - throw new Error("pump requires two streams per minimum"); - var error; - var destroys = streams.map(function(stream, i) { - var reading = i < streams.length - 1; - var writing = i > 0; - return destroyer(stream, reading, writing, function(err) { - if (!error) - error = err; - if (err) - destroys.forEach(call); - if (reading) - return; - destroys.forEach(call); - callback(error); - }); - }); - return streams.reduce(pipe); - }; - module2.exports = pump; - } -}); - -// node_modules/get-stream/buffer-stream.js -var require_buffer_stream = __commonJS({ - "node_modules/get-stream/buffer-stream.js"(exports, module2) { - "use strict"; - var { PassThrough: PassThroughStream } = require("stream"); - module2.exports = (options) => { - options = { ...options }; - const { array } = options; - let { encoding } = options; - const isBuffer = encoding === "buffer"; - let objectMode = false; - if (array) { - objectMode = !(encoding || isBuffer); - } else { - encoding = encoding || "utf8"; - } - if (isBuffer) { - encoding = null; - } - const stream = new PassThroughStream({ objectMode }); - if (encoding) { - stream.setEncoding(encoding); - } - let length = 0; - const chunks = []; - stream.on("data", (chunk) => { - chunks.push(chunk); - if (objectMode) { - length = chunks.length; - } else { - length += chunk.length; - } - }); - stream.getBufferedValue = () => { - if (array) { - return chunks; - } - return isBuffer ? Buffer.concat(chunks, length) : chunks.join(""); - }; - stream.getBufferedLength = () => length; - return stream; - }; - } -}); - -// node_modules/get-stream/index.js -var require_get_stream = __commonJS({ - "node_modules/get-stream/index.js"(exports, module2) { - "use strict"; - var { constants: BufferConstants } = require("buffer"); - var pump = require_pump(); - var bufferStream = require_buffer_stream(); - var MaxBufferError = class extends Error { - constructor() { - super("maxBuffer exceeded"); - this.name = "MaxBufferError"; - } - }; - async function getStream(inputStream, options) { - if (!inputStream) { - return Promise.reject(new Error("Expected a stream")); - } - options = { - maxBuffer: Infinity, - ...options - }; - const { maxBuffer } = options; - let stream; - await new Promise((resolve, reject) => { - const rejectPromise = (error) => { - if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) { - error.bufferedData = stream.getBufferedValue(); - } - reject(error); - }; - stream = pump(inputStream, bufferStream(options), (error) => { - if (error) { - rejectPromise(error); - return; - } - resolve(); - }); - stream.on("data", () => { - if (stream.getBufferedLength() > maxBuffer) { - rejectPromise(new MaxBufferError()); - } - }); - }); - return stream.getBufferedValue(); - } - module2.exports = getStream; - module2.exports.default = getStream; - module2.exports.buffer = (stream, options) => getStream(stream, { ...options, encoding: "buffer" }); - module2.exports.array = (stream, options) => getStream(stream, { ...options, array: true }); - module2.exports.MaxBufferError = MaxBufferError; - } -}); - -// node_modules/pend/index.js -var require_pend = __commonJS({ - "node_modules/pend/index.js"(exports, module2) { - module2.exports = Pend; - function Pend() { - this.pending = 0; - this.max = Infinity; - this.listeners = []; - this.waiting = []; - this.error = null; - } - Pend.prototype.go = function(fn) { - if (this.pending < this.max) { - pendGo(this, fn); - } else { - this.waiting.push(fn); - } - }; - Pend.prototype.wait = function(cb) { - if (this.pending === 0) { - cb(this.error); - } else { - this.listeners.push(cb); - } - }; - Pend.prototype.hold = function() { - return pendHold(this); - }; - function pendHold(self) { - self.pending += 1; - var called = false; - return onCb; - function onCb(err) { - if (called) - throw new Error("callback called twice"); - called = true; - self.error = self.error || err; - self.pending -= 1; - if (self.waiting.length > 0 && self.pending < self.max) { - pendGo(self, self.waiting.shift()); - } else if (self.pending === 0) { - var listeners = self.listeners; - self.listeners = []; - listeners.forEach(cbListener); - } - } - function cbListener(listener) { - listener(self.error); - } - } - function pendGo(self, fn) { - fn(pendHold(self)); - } - } -}); - -// node_modules/fd-slicer/index.js -var require_fd_slicer = __commonJS({ - "node_modules/fd-slicer/index.js"(exports) { - var fs2 = require("fs"); - var util = require("util"); - var stream = require("stream"); - var Readable2 = stream.Readable; - var Writable = stream.Writable; - var PassThrough = stream.PassThrough; - var Pend = require_pend(); - var EventEmitter = require("events").EventEmitter; - exports.createFromBuffer = createFromBuffer; - exports.createFromFd = createFromFd; - exports.BufferSlicer = BufferSlicer; - exports.FdSlicer = FdSlicer; - util.inherits(FdSlicer, EventEmitter); - function FdSlicer(fd, options) { - options = options || {}; - EventEmitter.call(this); - this.fd = fd; - this.pend = new Pend(); - this.pend.max = 1; - this.refCount = 0; - this.autoClose = !!options.autoClose; - } - FdSlicer.prototype.read = function(buffer, offset, length, position, callback) { - var self = this; - self.pend.go(function(cb) { - fs2.read(self.fd, buffer, offset, length, position, function(err, bytesRead, buffer2) { - cb(); - callback(err, bytesRead, buffer2); - }); - }); - }; - FdSlicer.prototype.write = function(buffer, offset, length, position, callback) { - var self = this; - self.pend.go(function(cb) { - fs2.write(self.fd, buffer, offset, length, position, function(err, written, buffer2) { - cb(); - callback(err, written, buffer2); - }); - }); - }; - FdSlicer.prototype.createReadStream = function(options) { - return new ReadStream(this, options); - }; - FdSlicer.prototype.createWriteStream = function(options) { - return new WriteStream(this, options); - }; - FdSlicer.prototype.ref = function() { - this.refCount += 1; - }; - FdSlicer.prototype.unref = function() { - var self = this; - self.refCount -= 1; - if (self.refCount > 0) - return; - if (self.refCount < 0) - throw new Error("invalid unref"); - if (self.autoClose) { - fs2.close(self.fd, onCloseDone); - } - function onCloseDone(err) { - if (err) { - self.emit("error", err); - } else { - self.emit("close"); - } - } - }; - util.inherits(ReadStream, Readable2); - function ReadStream(context, options) { - options = options || {}; - Readable2.call(this, options); - this.context = context; - this.context.ref(); - this.start = options.start || 0; - this.endOffset = options.end; - this.pos = this.start; - this.destroyed = false; - } - ReadStream.prototype._read = function(n) { - var self = this; - if (self.destroyed) - return; - var toRead = Math.min(self._readableState.highWaterMark, n); - if (self.endOffset != null) { - toRead = Math.min(toRead, self.endOffset - self.pos); - } - if (toRead <= 0) { - self.destroyed = true; - self.push(null); - self.context.unref(); - return; - } - self.context.pend.go(function(cb) { - if (self.destroyed) - return cb(); - var buffer = new Buffer(toRead); - fs2.read(self.context.fd, buffer, 0, toRead, self.pos, function(err, bytesRead) { - if (err) { - self.destroy(err); - } else if (bytesRead === 0) { - self.destroyed = true; - self.push(null); - self.context.unref(); - } else { - self.pos += bytesRead; - self.push(buffer.slice(0, bytesRead)); - } - cb(); - }); - }); - }; - ReadStream.prototype.destroy = function(err) { - if (this.destroyed) - return; - err = err || new Error("stream destroyed"); - this.destroyed = true; - this.emit("error", err); - this.context.unref(); - }; - util.inherits(WriteStream, Writable); - function WriteStream(context, options) { - options = options || {}; - Writable.call(this, options); - this.context = context; - this.context.ref(); - this.start = options.start || 0; - this.endOffset = options.end == null ? Infinity : +options.end; - this.bytesWritten = 0; - this.pos = this.start; - this.destroyed = false; - this.on("finish", this.destroy.bind(this)); - } - WriteStream.prototype._write = function(buffer, encoding, callback) { - var self = this; - if (self.destroyed) - return; - if (self.pos + buffer.length > self.endOffset) { - var err = new Error("maximum file length exceeded"); - err.code = "ETOOBIG"; - self.destroy(); - callback(err); - return; - } - self.context.pend.go(function(cb) { - if (self.destroyed) - return cb(); - fs2.write(self.context.fd, buffer, 0, buffer.length, self.pos, function(err2, bytes) { - if (err2) { - self.destroy(); - cb(); - callback(err2); - } else { - self.bytesWritten += bytes; - self.pos += bytes; - self.emit("progress"); - cb(); - callback(); - } - }); - }); - }; - WriteStream.prototype.destroy = function() { - if (this.destroyed) - return; - this.destroyed = true; - this.context.unref(); - }; - util.inherits(BufferSlicer, EventEmitter); - function BufferSlicer(buffer, options) { - EventEmitter.call(this); - options = options || {}; - this.refCount = 0; - this.buffer = buffer; - this.maxChunkSize = options.maxChunkSize || Number.MAX_SAFE_INTEGER; - } - BufferSlicer.prototype.read = function(buffer, offset, length, position, callback) { - var end = position + length; - var delta = end - this.buffer.length; - var written = delta > 0 ? delta : length; - this.buffer.copy(buffer, offset, position, end); - setImmediate(function() { - callback(null, written); - }); - }; - BufferSlicer.prototype.write = function(buffer, offset, length, position, callback) { - buffer.copy(this.buffer, position, offset, offset + length); - setImmediate(function() { - callback(null, length, buffer); - }); - }; - BufferSlicer.prototype.createReadStream = function(options) { - options = options || {}; - var readStream = new PassThrough(options); - readStream.destroyed = false; - readStream.start = options.start || 0; - readStream.endOffset = options.end; - readStream.pos = readStream.endOffset || this.buffer.length; - var entireSlice = this.buffer.slice(readStream.start, readStream.pos); - var offset = 0; - while (true) { - var nextOffset = offset + this.maxChunkSize; - if (nextOffset >= entireSlice.length) { - if (offset < entireSlice.length) { - readStream.write(entireSlice.slice(offset, entireSlice.length)); - } - break; - } - readStream.write(entireSlice.slice(offset, nextOffset)); - offset = nextOffset; - } - readStream.end(); - readStream.destroy = function() { - readStream.destroyed = true; - }; - return readStream; - }; - BufferSlicer.prototype.createWriteStream = function(options) { - var bufferSlicer = this; - options = options || {}; - var writeStream = new Writable(options); - writeStream.start = options.start || 0; - writeStream.endOffset = options.end == null ? this.buffer.length : +options.end; - writeStream.bytesWritten = 0; - writeStream.pos = writeStream.start; - writeStream.destroyed = false; - writeStream._write = function(buffer, encoding, callback) { - if (writeStream.destroyed) - return; - var end = writeStream.pos + buffer.length; - if (end > writeStream.endOffset) { - var err = new Error("maximum file length exceeded"); - err.code = "ETOOBIG"; - writeStream.destroyed = true; - callback(err); - return; - } - buffer.copy(bufferSlicer.buffer, writeStream.pos, 0, buffer.length); - writeStream.bytesWritten += buffer.length; - writeStream.pos = end; - writeStream.emit("progress"); - callback(); - }; - writeStream.destroy = function() { - writeStream.destroyed = true; - }; - return writeStream; - }; - BufferSlicer.prototype.ref = function() { - this.refCount += 1; - }; - BufferSlicer.prototype.unref = function() { - this.refCount -= 1; - if (this.refCount < 0) { - throw new Error("invalid unref"); - } - }; - function createFromBuffer(buffer, options) { - return new BufferSlicer(buffer, options); - } - function createFromFd(fd, options) { - return new FdSlicer(fd, options); - } - } -}); - -// node_modules/buffer-crc32/index.js -var require_buffer_crc32 = __commonJS({ - "node_modules/buffer-crc32/index.js"(exports, module2) { - var Buffer2 = require("buffer").Buffer; - var CRC_TABLE = [ - 0, - 1996959894, - 3993919788, - 2567524794, - 124634137, - 1886057615, - 3915621685, - 2657392035, - 249268274, - 2044508324, - 3772115230, - 2547177864, - 162941995, - 2125561021, - 3887607047, - 2428444049, - 498536548, - 1789927666, - 4089016648, - 2227061214, - 450548861, - 1843258603, - 4107580753, - 2211677639, - 325883990, - 1684777152, - 4251122042, - 2321926636, - 335633487, - 1661365465, - 4195302755, - 2366115317, - 997073096, - 1281953886, - 3579855332, - 2724688242, - 1006888145, - 1258607687, - 3524101629, - 2768942443, - 901097722, - 1119000684, - 3686517206, - 2898065728, - 853044451, - 1172266101, - 3705015759, - 2882616665, - 651767980, - 1373503546, - 3369554304, - 3218104598, - 565507253, - 1454621731, - 3485111705, - 3099436303, - 671266974, - 1594198024, - 3322730930, - 2970347812, - 795835527, - 1483230225, - 3244367275, - 3060149565, - 1994146192, - 31158534, - 2563907772, - 4023717930, - 1907459465, - 112637215, - 2680153253, - 3904427059, - 2013776290, - 251722036, - 2517215374, - 3775830040, - 2137656763, - 141376813, - 2439277719, - 3865271297, - 1802195444, - 476864866, - 2238001368, - 4066508878, - 1812370925, - 453092731, - 2181625025, - 4111451223, - 1706088902, - 314042704, - 2344532202, - 4240017532, - 1658658271, - 366619977, - 2362670323, - 4224994405, - 1303535960, - 984961486, - 2747007092, - 3569037538, - 1256170817, - 1037604311, - 2765210733, - 3554079995, - 1131014506, - 879679996, - 2909243462, - 3663771856, - 1141124467, - 855842277, - 2852801631, - 3708648649, - 1342533948, - 654459306, - 3188396048, - 3373015174, - 1466479909, - 544179635, - 3110523913, - 3462522015, - 1591671054, - 702138776, - 2966460450, - 3352799412, - 1504918807, - 783551873, - 3082640443, - 3233442989, - 3988292384, - 2596254646, - 62317068, - 1957810842, - 3939845945, - 2647816111, - 81470997, - 1943803523, - 3814918930, - 2489596804, - 225274430, - 2053790376, - 3826175755, - 2466906013, - 167816743, - 2097651377, - 4027552580, - 2265490386, - 503444072, - 1762050814, - 4150417245, - 2154129355, - 426522225, - 1852507879, - 4275313526, - 2312317920, - 282753626, - 1742555852, - 4189708143, - 2394877945, - 397917763, - 1622183637, - 3604390888, - 2714866558, - 953729732, - 1340076626, - 3518719985, - 2797360999, - 1068828381, - 1219638859, - 3624741850, - 2936675148, - 906185462, - 1090812512, - 3747672003, - 2825379669, - 829329135, - 1181335161, - 3412177804, - 3160834842, - 628085408, - 1382605366, - 3423369109, - 3138078467, - 570562233, - 1426400815, - 3317316542, - 2998733608, - 733239954, - 1555261956, - 3268935591, - 3050360625, - 752459403, - 1541320221, - 2607071920, - 3965973030, - 1969922972, - 40735498, - 2617837225, - 3943577151, - 1913087877, - 83908371, - 2512341634, - 3803740692, - 2075208622, - 213261112, - 2463272603, - 3855990285, - 2094854071, - 198958881, - 2262029012, - 4057260610, - 1759359992, - 534414190, - 2176718541, - 4139329115, - 1873836001, - 414664567, - 2282248934, - 4279200368, - 1711684554, - 285281116, - 2405801727, - 4167216745, - 1634467795, - 376229701, - 2685067896, - 3608007406, - 1308918612, - 956543938, - 2808555105, - 3495958263, - 1231636301, - 1047427035, - 2932959818, - 3654703836, - 1088359270, - 936918e3, - 2847714899, - 3736837829, - 1202900863, - 817233897, - 3183342108, - 3401237130, - 1404277552, - 615818150, - 3134207493, - 3453421203, - 1423857449, - 601450431, - 3009837614, - 3294710456, - 1567103746, - 711928724, - 3020668471, - 3272380065, - 1510334235, - 755167117 - ]; - if (typeof Int32Array !== "undefined") { - CRC_TABLE = new Int32Array(CRC_TABLE); - } - function ensureBuffer(input) { - if (Buffer2.isBuffer(input)) { - return input; - } - var hasNewBufferAPI = typeof Buffer2.alloc === "function" && typeof Buffer2.from === "function"; - if (typeof input === "number") { - return hasNewBufferAPI ? Buffer2.alloc(input) : new Buffer2(input); - } else if (typeof input === "string") { - return hasNewBufferAPI ? Buffer2.from(input) : new Buffer2(input); - } else { - throw new Error("input must be buffer, number, or string, received " + typeof input); - } - } - function bufferizeInt(num) { - var tmp = ensureBuffer(4); - tmp.writeInt32BE(num, 0); - return tmp; - } - function _crc32(buf, previous) { - buf = ensureBuffer(buf); - if (Buffer2.isBuffer(previous)) { - previous = previous.readUInt32BE(0); - } - var crc = ~~previous ^ -1; - for (var n = 0; n < buf.length; n++) { - crc = CRC_TABLE[(crc ^ buf[n]) & 255] ^ crc >>> 8; - } - return crc ^ -1; - } - function crc32() { - return bufferizeInt(_crc32.apply(null, arguments)); - } - crc32.signed = function() { - return _crc32.apply(null, arguments); - }; - crc32.unsigned = function() { - return _crc32.apply(null, arguments) >>> 0; - }; - module2.exports = crc32; - } -}); - -// node_modules/yauzl/index.js -var require_yauzl = __commonJS({ - "node_modules/yauzl/index.js"(exports) { - var fs2 = require("fs"); - var zlib = require("zlib"); - var fd_slicer = require_fd_slicer(); - var crc32 = require_buffer_crc32(); - var util = require("util"); - var EventEmitter = require("events").EventEmitter; - var Transform = require("stream").Transform; - var PassThrough = require("stream").PassThrough; - var Writable = require("stream").Writable; - exports.open = open; - exports.fromFd = fromFd; - exports.fromBuffer = fromBuffer; - exports.fromRandomAccessReader = fromRandomAccessReader; - exports.dosDateTimeToDate = dosDateTimeToDate; - exports.validateFileName = validateFileName; - exports.ZipFile = ZipFile; - exports.Entry = Entry; - exports.RandomAccessReader = RandomAccessReader; - function open(path2, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) - options = {}; - if (options.autoClose == null) - options.autoClose = true; - if (options.lazyEntries == null) - options.lazyEntries = false; - if (options.decodeStrings == null) - options.decodeStrings = true; - if (options.validateEntrySizes == null) - options.validateEntrySizes = true; - if (options.strictFileNames == null) - options.strictFileNames = false; - if (callback == null) - callback = defaultCallback; - fs2.open(path2, "r", function(err, fd) { - if (err) - return callback(err); - fromFd(fd, options, function(err2, zipfile) { - if (err2) - fs2.close(fd, defaultCallback); - callback(err2, zipfile); - }); - }); - } - function fromFd(fd, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) - options = {}; - if (options.autoClose == null) - options.autoClose = false; - if (options.lazyEntries == null) - options.lazyEntries = false; - if (options.decodeStrings == null) - options.decodeStrings = true; - if (options.validateEntrySizes == null) - options.validateEntrySizes = true; - if (options.strictFileNames == null) - options.strictFileNames = false; - if (callback == null) - callback = defaultCallback; - fs2.fstat(fd, function(err, stats) { - if (err) - return callback(err); - var reader = fd_slicer.createFromFd(fd, { autoClose: true }); - fromRandomAccessReader(reader, stats.size, options, callback); - }); - } - function fromBuffer(buffer, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) - options = {}; - options.autoClose = false; - if (options.lazyEntries == null) - options.lazyEntries = false; - if (options.decodeStrings == null) - options.decodeStrings = true; - if (options.validateEntrySizes == null) - options.validateEntrySizes = true; - if (options.strictFileNames == null) - options.strictFileNames = false; - var reader = fd_slicer.createFromBuffer(buffer, { maxChunkSize: 65536 }); - fromRandomAccessReader(reader, buffer.length, options, callback); - } - function fromRandomAccessReader(reader, totalSize, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) - options = {}; - if (options.autoClose == null) - options.autoClose = true; - if (options.lazyEntries == null) - options.lazyEntries = false; - if (options.decodeStrings == null) - options.decodeStrings = true; - var decodeStrings = !!options.decodeStrings; - if (options.validateEntrySizes == null) - options.validateEntrySizes = true; - if (options.strictFileNames == null) - options.strictFileNames = false; - if (callback == null) - callback = defaultCallback; - if (typeof totalSize !== "number") - throw new Error("expected totalSize parameter to be a number"); - if (totalSize > Number.MAX_SAFE_INTEGER) { - throw new Error("zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double."); - } - reader.ref(); - var eocdrWithoutCommentSize = 22; - var maxCommentSize = 65535; - var bufferSize = Math.min(eocdrWithoutCommentSize + maxCommentSize, totalSize); - var buffer = newBuffer(bufferSize); - var bufferReadStart = totalSize - buffer.length; - readAndAssertNoEof(reader, buffer, 0, bufferSize, bufferReadStart, function(err) { - if (err) - return callback(err); - for (var i = bufferSize - eocdrWithoutCommentSize; i >= 0; i -= 1) { - if (buffer.readUInt32LE(i) !== 101010256) - continue; - var eocdrBuffer = buffer.slice(i); - var diskNumber = eocdrBuffer.readUInt16LE(4); - if (diskNumber !== 0) { - return callback(new Error("multi-disk zip files are not supported: found disk number: " + diskNumber)); - } - var entryCount = eocdrBuffer.readUInt16LE(10); - var centralDirectoryOffset = eocdrBuffer.readUInt32LE(16); - var commentLength = eocdrBuffer.readUInt16LE(20); - var expectedCommentLength = eocdrBuffer.length - eocdrWithoutCommentSize; - if (commentLength !== expectedCommentLength) { - return callback(new Error("invalid comment length. expected: " + expectedCommentLength + ". found: " + commentLength)); - } - var comment = decodeStrings ? decodeBuffer(eocdrBuffer, 22, eocdrBuffer.length, false) : eocdrBuffer.slice(22); - if (!(entryCount === 65535 || centralDirectoryOffset === 4294967295)) { - return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames)); - } - var zip64EocdlBuffer = newBuffer(20); - var zip64EocdlOffset = bufferReadStart + i - zip64EocdlBuffer.length; - readAndAssertNoEof(reader, zip64EocdlBuffer, 0, zip64EocdlBuffer.length, zip64EocdlOffset, function(err2) { - if (err2) - return callback(err2); - if (zip64EocdlBuffer.readUInt32LE(0) !== 117853008) { - return callback(new Error("invalid zip64 end of central directory locator signature")); - } - var zip64EocdrOffset = readUInt64LE(zip64EocdlBuffer, 8); - var zip64EocdrBuffer = newBuffer(56); - readAndAssertNoEof(reader, zip64EocdrBuffer, 0, zip64EocdrBuffer.length, zip64EocdrOffset, function(err3) { - if (err3) - return callback(err3); - if (zip64EocdrBuffer.readUInt32LE(0) !== 101075792) { - return callback(new Error("invalid zip64 end of central directory record signature")); - } - entryCount = readUInt64LE(zip64EocdrBuffer, 32); - centralDirectoryOffset = readUInt64LE(zip64EocdrBuffer, 48); - return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames)); - }); - }); - return; - } - callback(new Error("end of central directory record signature not found")); - }); - } - util.inherits(ZipFile, EventEmitter); - function ZipFile(reader, centralDirectoryOffset, fileSize, entryCount, comment, autoClose, lazyEntries, decodeStrings, validateEntrySizes, strictFileNames) { - var self = this; - EventEmitter.call(self); - self.reader = reader; - self.reader.on("error", function(err) { - emitError(self, err); - }); - self.reader.once("close", function() { - self.emit("close"); - }); - self.readEntryCursor = centralDirectoryOffset; - self.fileSize = fileSize; - self.entryCount = entryCount; - self.comment = comment; - self.entriesRead = 0; - self.autoClose = !!autoClose; - self.lazyEntries = !!lazyEntries; - self.decodeStrings = !!decodeStrings; - self.validateEntrySizes = !!validateEntrySizes; - self.strictFileNames = !!strictFileNames; - self.isOpen = true; - self.emittedError = false; - if (!self.lazyEntries) - self._readEntry(); - } - ZipFile.prototype.close = function() { - if (!this.isOpen) - return; - this.isOpen = false; - this.reader.unref(); - }; - function emitErrorAndAutoClose(self, err) { - if (self.autoClose) - self.close(); - emitError(self, err); - } - function emitError(self, err) { - if (self.emittedError) - return; - self.emittedError = true; - self.emit("error", err); - } - ZipFile.prototype.readEntry = function() { - if (!this.lazyEntries) - throw new Error("readEntry() called without lazyEntries:true"); - this._readEntry(); - }; - ZipFile.prototype._readEntry = function() { - var self = this; - if (self.entryCount === self.entriesRead) { - setImmediate(function() { - if (self.autoClose) - self.close(); - if (self.emittedError) - return; - self.emit("end"); - }); - return; - } - if (self.emittedError) - return; - var buffer = newBuffer(46); - readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) { - if (err) - return emitErrorAndAutoClose(self, err); - if (self.emittedError) - return; - var entry = new Entry(); - var signature = buffer.readUInt32LE(0); - if (signature !== 33639248) - return emitErrorAndAutoClose(self, new Error("invalid central directory file header signature: 0x" + signature.toString(16))); - entry.versionMadeBy = buffer.readUInt16LE(4); - entry.versionNeededToExtract = buffer.readUInt16LE(6); - entry.generalPurposeBitFlag = buffer.readUInt16LE(8); - entry.compressionMethod = buffer.readUInt16LE(10); - entry.lastModFileTime = buffer.readUInt16LE(12); - entry.lastModFileDate = buffer.readUInt16LE(14); - entry.crc32 = buffer.readUInt32LE(16); - entry.compressedSize = buffer.readUInt32LE(20); - entry.uncompressedSize = buffer.readUInt32LE(24); - entry.fileNameLength = buffer.readUInt16LE(28); - entry.extraFieldLength = buffer.readUInt16LE(30); - entry.fileCommentLength = buffer.readUInt16LE(32); - entry.internalFileAttributes = buffer.readUInt16LE(36); - entry.externalFileAttributes = buffer.readUInt32LE(38); - entry.relativeOffsetOfLocalHeader = buffer.readUInt32LE(42); - if (entry.generalPurposeBitFlag & 64) - return emitErrorAndAutoClose(self, new Error("strong encryption is not supported")); - self.readEntryCursor += 46; - buffer = newBuffer(entry.fileNameLength + entry.extraFieldLength + entry.fileCommentLength); - readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err2) { - if (err2) - return emitErrorAndAutoClose(self, err2); - if (self.emittedError) - return; - var isUtf8 = (entry.generalPurposeBitFlag & 2048) !== 0; - entry.fileName = self.decodeStrings ? decodeBuffer(buffer, 0, entry.fileNameLength, isUtf8) : buffer.slice(0, entry.fileNameLength); - var fileCommentStart = entry.fileNameLength + entry.extraFieldLength; - var extraFieldBuffer = buffer.slice(entry.fileNameLength, fileCommentStart); - entry.extraFields = []; - var i = 0; - while (i < extraFieldBuffer.length - 3) { - var headerId = extraFieldBuffer.readUInt16LE(i + 0); - var dataSize = extraFieldBuffer.readUInt16LE(i + 2); - var dataStart = i + 4; - var dataEnd = dataStart + dataSize; - if (dataEnd > extraFieldBuffer.length) - return emitErrorAndAutoClose(self, new Error("extra field length exceeds extra field buffer size")); - var dataBuffer = newBuffer(dataSize); - extraFieldBuffer.copy(dataBuffer, 0, dataStart, dataEnd); - entry.extraFields.push({ - id: headerId, - data: dataBuffer - }); - i = dataEnd; - } - entry.fileComment = self.decodeStrings ? decodeBuffer(buffer, fileCommentStart, fileCommentStart + entry.fileCommentLength, isUtf8) : buffer.slice(fileCommentStart, fileCommentStart + entry.fileCommentLength); - entry.comment = entry.fileComment; - self.readEntryCursor += buffer.length; - self.entriesRead += 1; - if (entry.uncompressedSize === 4294967295 || entry.compressedSize === 4294967295 || entry.relativeOffsetOfLocalHeader === 4294967295) { - var zip64EiefBuffer = null; - for (var i = 0; i < entry.extraFields.length; i++) { - var extraField = entry.extraFields[i]; - if (extraField.id === 1) { - zip64EiefBuffer = extraField.data; - break; - } - } - if (zip64EiefBuffer == null) { - return emitErrorAndAutoClose(self, new Error("expected zip64 extended information extra field")); - } - var index = 0; - if (entry.uncompressedSize === 4294967295) { - if (index + 8 > zip64EiefBuffer.length) { - return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include uncompressed size")); - } - entry.uncompressedSize = readUInt64LE(zip64EiefBuffer, index); - index += 8; - } - if (entry.compressedSize === 4294967295) { - if (index + 8 > zip64EiefBuffer.length) { - return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include compressed size")); - } - entry.compressedSize = readUInt64LE(zip64EiefBuffer, index); - index += 8; - } - if (entry.relativeOffsetOfLocalHeader === 4294967295) { - if (index + 8 > zip64EiefBuffer.length) { - return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include relative header offset")); - } - entry.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index); - index += 8; - } - } - if (self.decodeStrings) { - for (var i = 0; i < entry.extraFields.length; i++) { - var extraField = entry.extraFields[i]; - if (extraField.id === 28789) { - if (extraField.data.length < 6) { - continue; - } - if (extraField.data.readUInt8(0) !== 1) { - continue; - } - var oldNameCrc32 = extraField.data.readUInt32LE(1); - if (crc32.unsigned(buffer.slice(0, entry.fileNameLength)) !== oldNameCrc32) { - continue; - } - entry.fileName = decodeBuffer(extraField.data, 5, extraField.data.length, true); - break; - } - } - } - if (self.validateEntrySizes && entry.compressionMethod === 0) { - var expectedCompressedSize = entry.uncompressedSize; - if (entry.isEncrypted()) { - expectedCompressedSize += 12; - } - if (entry.compressedSize !== expectedCompressedSize) { - var msg = "compressed/uncompressed size mismatch for stored file: " + entry.compressedSize + " != " + entry.uncompressedSize; - return emitErrorAndAutoClose(self, new Error(msg)); - } - } - if (self.decodeStrings) { - if (!self.strictFileNames) { - entry.fileName = entry.fileName.replace(/\\/g, "/"); - } - var errorMessage = validateFileName(entry.fileName, self.validateFileNameOptions); - if (errorMessage != null) - return emitErrorAndAutoClose(self, new Error(errorMessage)); - } - self.emit("entry", entry); - if (!self.lazyEntries) - self._readEntry(); - }); - }); - }; - ZipFile.prototype.openReadStream = function(entry, options, callback) { - var self = this; - var relativeStart = 0; - var relativeEnd = entry.compressedSize; - if (callback == null) { - callback = options; - options = {}; - } else { - if (options.decrypt != null) { - if (!entry.isEncrypted()) { - throw new Error("options.decrypt can only be specified for encrypted entries"); - } - if (options.decrypt !== false) - throw new Error("invalid options.decrypt value: " + options.decrypt); - if (entry.isCompressed()) { - if (options.decompress !== false) - throw new Error("entry is encrypted and compressed, and options.decompress !== false"); - } - } - if (options.decompress != null) { - if (!entry.isCompressed()) { - throw new Error("options.decompress can only be specified for compressed entries"); - } - if (!(options.decompress === false || options.decompress === true)) { - throw new Error("invalid options.decompress value: " + options.decompress); - } - } - if (options.start != null || options.end != null) { - if (entry.isCompressed() && options.decompress !== false) { - throw new Error("start/end range not allowed for compressed entry without options.decompress === false"); - } - if (entry.isEncrypted() && options.decrypt !== false) { - throw new Error("start/end range not allowed for encrypted entry without options.decrypt === false"); - } - } - if (options.start != null) { - relativeStart = options.start; - if (relativeStart < 0) - throw new Error("options.start < 0"); - if (relativeStart > entry.compressedSize) - throw new Error("options.start > entry.compressedSize"); - } - if (options.end != null) { - relativeEnd = options.end; - if (relativeEnd < 0) - throw new Error("options.end < 0"); - if (relativeEnd > entry.compressedSize) - throw new Error("options.end > entry.compressedSize"); - if (relativeEnd < relativeStart) - throw new Error("options.end < options.start"); - } - } - if (!self.isOpen) - return callback(new Error("closed")); - if (entry.isEncrypted()) { - if (options.decrypt !== false) - return callback(new Error("entry is encrypted, and options.decrypt !== false")); - } - self.reader.ref(); - var buffer = newBuffer(30); - readAndAssertNoEof(self.reader, buffer, 0, buffer.length, entry.relativeOffsetOfLocalHeader, function(err) { - try { - if (err) - return callback(err); - var signature = buffer.readUInt32LE(0); - if (signature !== 67324752) { - return callback(new Error("invalid local file header signature: 0x" + signature.toString(16))); - } - var fileNameLength = buffer.readUInt16LE(26); - var extraFieldLength = buffer.readUInt16LE(28); - var localFileHeaderEnd = entry.relativeOffsetOfLocalHeader + buffer.length + fileNameLength + extraFieldLength; - var decompress; - if (entry.compressionMethod === 0) { - decompress = false; - } else if (entry.compressionMethod === 8) { - decompress = options.decompress != null ? options.decompress : true; - } else { - return callback(new Error("unsupported compression method: " + entry.compressionMethod)); - } - var fileDataStart = localFileHeaderEnd; - var fileDataEnd = fileDataStart + entry.compressedSize; - if (entry.compressedSize !== 0) { - if (fileDataEnd > self.fileSize) { - return callback(new Error("file data overflows file bounds: " + fileDataStart + " + " + entry.compressedSize + " > " + self.fileSize)); - } - } - var readStream = self.reader.createReadStream({ - start: fileDataStart + relativeStart, - end: fileDataStart + relativeEnd - }); - var endpointStream = readStream; - if (decompress) { - var destroyed = false; - var inflateFilter = zlib.createInflateRaw(); - readStream.on("error", function(err2) { - setImmediate(function() { - if (!destroyed) - inflateFilter.emit("error", err2); - }); - }); - readStream.pipe(inflateFilter); - if (self.validateEntrySizes) { - endpointStream = new AssertByteCountStream(entry.uncompressedSize); - inflateFilter.on("error", function(err2) { - setImmediate(function() { - if (!destroyed) - endpointStream.emit("error", err2); - }); - }); - inflateFilter.pipe(endpointStream); - } else { - endpointStream = inflateFilter; - } - endpointStream.destroy = function() { - destroyed = true; - if (inflateFilter !== endpointStream) - inflateFilter.unpipe(endpointStream); - readStream.unpipe(inflateFilter); - readStream.destroy(); - }; - } - callback(null, endpointStream); - } finally { - self.reader.unref(); - } - }); - }; - function Entry() { - } - Entry.prototype.getLastModDate = function() { - return dosDateTimeToDate(this.lastModFileDate, this.lastModFileTime); - }; - Entry.prototype.isEncrypted = function() { - return (this.generalPurposeBitFlag & 1) !== 0; - }; - Entry.prototype.isCompressed = function() { - return this.compressionMethod === 8; - }; - function dosDateTimeToDate(date, time) { - var day = date & 31; - var month = (date >> 5 & 15) - 1; - var year = (date >> 9 & 127) + 1980; - var millisecond = 0; - var second = (time & 31) * 2; - var minute = time >> 5 & 63; - var hour = time >> 11 & 31; - return new Date(year, month, day, hour, minute, second, millisecond); - } - function validateFileName(fileName) { - if (fileName.indexOf("\\") !== -1) { - return "invalid characters in fileName: " + fileName; - } - if (/^[a-zA-Z]:/.test(fileName) || /^\//.test(fileName)) { - return "absolute path: " + fileName; - } - if (fileName.split("/").indexOf("..") !== -1) { - return "invalid relative path: " + fileName; - } - return null; - } - function readAndAssertNoEof(reader, buffer, offset, length, position, callback) { - if (length === 0) { - return setImmediate(function() { - callback(null, newBuffer(0)); - }); - } - reader.read(buffer, offset, length, position, function(err, bytesRead) { - if (err) - return callback(err); - if (bytesRead < length) { - return callback(new Error("unexpected EOF")); - } - callback(); - }); - } - util.inherits(AssertByteCountStream, Transform); - function AssertByteCountStream(byteCount) { - Transform.call(this); - this.actualByteCount = 0; - this.expectedByteCount = byteCount; - } - AssertByteCountStream.prototype._transform = function(chunk, encoding, cb) { - this.actualByteCount += chunk.length; - if (this.actualByteCount > this.expectedByteCount) { - var msg = "too many bytes in the stream. expected " + this.expectedByteCount + ". got at least " + this.actualByteCount; - return cb(new Error(msg)); - } - cb(null, chunk); - }; - AssertByteCountStream.prototype._flush = function(cb) { - if (this.actualByteCount < this.expectedByteCount) { - var msg = "not enough bytes in the stream. expected " + this.expectedByteCount + ". got only " + this.actualByteCount; - return cb(new Error(msg)); - } - cb(); - }; - util.inherits(RandomAccessReader, EventEmitter); - function RandomAccessReader() { - EventEmitter.call(this); - this.refCount = 0; - } - RandomAccessReader.prototype.ref = function() { - this.refCount += 1; - }; - RandomAccessReader.prototype.unref = function() { - var self = this; - self.refCount -= 1; - if (self.refCount > 0) - return; - if (self.refCount < 0) - throw new Error("invalid unref"); - self.close(onCloseDone); - function onCloseDone(err) { - if (err) - return self.emit("error", err); - self.emit("close"); - } - }; - RandomAccessReader.prototype.createReadStream = function(options) { - var start = options.start; - var end = options.end; - if (start === end) { - var emptyStream = new PassThrough(); - setImmediate(function() { - emptyStream.end(); - }); - return emptyStream; - } - var stream = this._readStreamForRange(start, end); - var destroyed = false; - var refUnrefFilter = new RefUnrefFilter(this); - stream.on("error", function(err) { - setImmediate(function() { - if (!destroyed) - refUnrefFilter.emit("error", err); - }); - }); - refUnrefFilter.destroy = function() { - stream.unpipe(refUnrefFilter); - refUnrefFilter.unref(); - stream.destroy(); - }; - var byteCounter = new AssertByteCountStream(end - start); - refUnrefFilter.on("error", function(err) { - setImmediate(function() { - if (!destroyed) - byteCounter.emit("error", err); - }); - }); - byteCounter.destroy = function() { - destroyed = true; - refUnrefFilter.unpipe(byteCounter); - refUnrefFilter.destroy(); - }; - return stream.pipe(refUnrefFilter).pipe(byteCounter); - }; - RandomAccessReader.prototype._readStreamForRange = function(start, end) { - throw new Error("not implemented"); - }; - RandomAccessReader.prototype.read = function(buffer, offset, length, position, callback) { - var readStream = this.createReadStream({ start: position, end: position + length }); - var writeStream = new Writable(); - var written = 0; - writeStream._write = function(chunk, encoding, cb) { - chunk.copy(buffer, offset + written, 0, chunk.length); - written += chunk.length; - cb(); - }; - writeStream.on("finish", callback); - readStream.on("error", function(error) { - callback(error); - }); - readStream.pipe(writeStream); - }; - RandomAccessReader.prototype.close = function(callback) { - setImmediate(callback); - }; - util.inherits(RefUnrefFilter, PassThrough); - function RefUnrefFilter(context) { - PassThrough.call(this); - this.context = context; - this.context.ref(); - this.unreffedYet = false; - } - RefUnrefFilter.prototype._flush = function(cb) { - this.unref(); - cb(); - }; - RefUnrefFilter.prototype.unref = function(cb) { - if (this.unreffedYet) - return; - this.unreffedYet = true; - this.context.unref(); - }; - var cp437 = "\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"; - function decodeBuffer(buffer, start, end, isUtf8) { - if (isUtf8) { - return buffer.toString("utf8", start, end); - } else { - var result = ""; - for (var i = start; i < end; i++) { - result += cp437[buffer[i]]; - } - return result; - } - } - function readUInt64LE(buffer, offset) { - var lower32 = buffer.readUInt32LE(offset); - var upper32 = buffer.readUInt32LE(offset + 4); - return upper32 * 4294967296 + lower32; - } - var newBuffer; - if (typeof Buffer.allocUnsafe === "function") { - newBuffer = function(len) { - return Buffer.allocUnsafe(len); - }; - } else { - newBuffer = function(len) { - return new Buffer(len); - }; - } - function defaultCallback(err) { - if (err) - throw err; - } - } -}); - -// node_modules/extract-zip/index.js -var require_extract_zip = __commonJS({ - "node_modules/extract-zip/index.js"(exports, module2) { - var debug = require_src()("extract-zip"); - var { createWriteStream: createWriteStream2, promises: fs2 } = require("fs"); - var getStream = require_get_stream(); - var path2 = require("path"); - var { promisify } = require("util"); - var stream = require("stream"); - var yauzl = require_yauzl(); - var openZip = promisify(yauzl.open); - var pipeline = promisify(stream.pipeline); - var Extractor = class { - constructor(zipPath, opts) { - this.zipPath = zipPath; - this.opts = opts; - } - async extract() { - debug("opening", this.zipPath, "with opts", this.opts); - this.zipfile = await openZip(this.zipPath, { lazyEntries: true }); - this.canceled = false; - return new Promise((resolve, reject) => { - this.zipfile.on("error", (err) => { - this.canceled = true; - reject(err); - }); - this.zipfile.readEntry(); - this.zipfile.on("close", () => { - if (!this.canceled) { - debug("zip extraction complete"); - resolve(); - } - }); - this.zipfile.on("entry", async (entry) => { - if (this.canceled) { - debug("skipping entry", entry.fileName, { cancelled: this.canceled }); - return; - } - debug("zipfile entry", entry.fileName); - if (entry.fileName.startsWith("__MACOSX/")) { - this.zipfile.readEntry(); - return; - } - const destDir = path2.dirname(path2.join(this.opts.dir, entry.fileName)); - try { - await fs2.mkdir(destDir, { recursive: true }); - const canonicalDestDir = await fs2.realpath(destDir); - const relativeDestDir = path2.relative(this.opts.dir, canonicalDestDir); - if (relativeDestDir.split(path2.sep).includes("..")) { - throw new Error(`Out of bound path "${canonicalDestDir}" found while processing file ${entry.fileName}`); - } - await this.extractEntry(entry); - debug("finished processing", entry.fileName); - this.zipfile.readEntry(); - } catch (err) { - this.canceled = true; - this.zipfile.close(); - reject(err); - } - }); - }); - } - async extractEntry(entry) { - if (this.canceled) { - debug("skipping entry extraction", entry.fileName, { cancelled: this.canceled }); - return; - } - if (this.opts.onEntry) { - this.opts.onEntry(entry, this.zipfile); - } - const dest = path2.join(this.opts.dir, entry.fileName); - const mode = entry.externalFileAttributes >> 16 & 65535; - const IFMT = 61440; - const IFDIR = 16384; - const IFLNK = 40960; - const symlink = (mode & IFMT) === IFLNK; - let isDir = (mode & IFMT) === IFDIR; - if (!isDir && entry.fileName.endsWith("/")) { - isDir = true; - } - const madeBy = entry.versionMadeBy >> 8; - if (!isDir) - isDir = madeBy === 0 && entry.externalFileAttributes === 16; - debug("extracting entry", { filename: entry.fileName, isDir, isSymlink: symlink }); - const procMode = this.getExtractedMode(mode, isDir) & 511; - const destDir = isDir ? dest : path2.dirname(dest); - const mkdirOptions = { recursive: true }; - if (isDir) { - mkdirOptions.mode = procMode; - } - debug("mkdir", { dir: destDir, ...mkdirOptions }); - await fs2.mkdir(destDir, mkdirOptions); - if (isDir) - return; - debug("opening read stream", dest); - const readStream = await promisify(this.zipfile.openReadStream.bind(this.zipfile))(entry); - if (symlink) { - const link = await getStream(readStream); - debug("creating symlink", link, dest); - await fs2.symlink(link, dest); - } else { - await pipeline(readStream, createWriteStream2(dest, { mode: procMode })); - } - } - getExtractedMode(entryMode, isDir) { - let mode = entryMode; - if (mode === 0) { - if (isDir) { - if (this.opts.defaultDirMode) { - mode = parseInt(this.opts.defaultDirMode, 10); - } - if (!mode) { - mode = 493; - } - } else { - if (this.opts.defaultFileMode) { - mode = parseInt(this.opts.defaultFileMode, 10); - } - if (!mode) { - mode = 420; - } - } - } - return mode; - } - }; - module2.exports = async function(zipPath, opts) { - debug("creating target directory", opts.dir); - if (!path2.isAbsolute(opts.dir)) { - throw new Error("Target directory is expected to be absolute"); - } - await fs2.mkdir(opts.dir, { recursive: true }); - opts.dir = await fs2.realpath(opts.dir); - return new Extractor(zipPath, opts).extract(); - }; - } -}); - -// index.ts -var nodejs_build_exports = {}; -__export(nodejs_build_exports, { - handler: () => handler -}); -module.exports = __toCommonJS(nodejs_build_exports); -var fs = __toESM(require("fs")); -var path = __toESM(require("path")); -var import_adm_zip = __toESM(require_adm_zip()); -var import_extract_zip = __toESM(require_extract_zip()); -var import_child_process = require("child_process"); -var import_stream = require("stream"); -var import_client_s3 = require("@aws-sdk/client-s3"); -var s3 = new import_client_s3.S3Client({}); -var handler = async (event, context) => { - let rootDir = ""; - console.log(JSON.stringify(event)); - try { - if (event.RequestType == "Create" || event.RequestType == "Update") { - const props = event.ResourceProperties; - rootDir = fs.mkdtempSync("/tmp/extract"); - process.env.NPM_CONFIG_CACHE = "/tmp/.npm"; - Object.entries(props.environment ?? {}).forEach(([key, value]) => process.env[key] = value); - const promises = props.sources.map(async (p) => { - const dir = await extractZip(rootDir, p.directoryName, p.sourceObjectKey, p.sourceBucketName); - if (p.commands != null) { - (0, import_child_process.execSync)(p.commands.join(" && "), { cwd: dir, stdio: "inherit" }); - } - }); - await Promise.all(promises); - console.log(JSON.stringify(process.env)); - const wd = path.join(rootDir, props.workingDirectory); - (0, import_child_process.execSync)(props.buildCommands.join(" && "), { - cwd: wd, - stdio: "inherit" - }); - const srcPath = path.join(rootDir, props.outputSourceDirectory); - await uploadDistDirectory(srcPath, props.destinationBucketName, props.destinationObjectKey); - } else { - } - await sendStatus("SUCCESS", event, context); - } catch (e) { - console.log(e); - const err = e; - await sendStatus("FAILED", event, context, err.message); - } finally { - if (rootDir != "") { - fs.rmSync(rootDir, { recursive: true, force: true }); - } - } -}; -var sendStatus = async (status, event, context, reason) => { - const responseBody = JSON.stringify({ - Status: status, - Reason: reason ?? "See the details in CloudWatch Log Stream: " + context.logStreamName, - PhysicalResourceId: context.logStreamName, - StackId: event.StackId, - RequestId: event.RequestId, - LogicalResourceId: event.LogicalResourceId, - NoEcho: false, - Data: {} - }); - await fetch(event.ResponseURL, { - method: "PUT", - body: responseBody, - headers: { - "Content-Type": "", - "Content-Length": responseBody.length.toString() - } - }); -}; -var uploadDistDirectory = async (srcPath, dstBucket, dstKey) => { - const zip = new import_adm_zip.default(); - zip.addLocalFolder(srcPath); - await s3.send(new import_client_s3.PutObjectCommand({ - Body: zip.toBuffer(), - Bucket: dstBucket, - Key: dstKey - })); -}; -var extractZip = async (rootDir, dirName, key, bucket) => { - const dir = path.join(rootDir, dirName); - fs.mkdirSync(dir, { recursive: true }); - const zipPath = path.join(dir, "temp.zip"); - await downloadS3File(key, bucket, zipPath); - await (0, import_extract_zip.default)(zipPath, { dir }); - console.log(`extracted to ${dir}`); - return dir; -}; -var downloadS3File = async (key, bucket, dst) => { - const data = await s3.send(new import_client_s3.GetObjectCommand({ Bucket: bucket, Key: key })); - await new Promise((resolve, reject) => { - if (data.Body instanceof import_stream.Readable) { - data.Body.pipe(fs.createWriteStream(dst)).on("error", (err) => reject(err)).on("close", () => resolve(1)); - } - }); -}; -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = { - handler -}); diff --git a/test/nodejs-build.integ.snapshot/asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/index.js b/test/nodejs-build.integ.snapshot/asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/index.js deleted file mode 100644 index 05b6675..0000000 --- a/test/nodejs-build.integ.snapshot/asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/index.js +++ /dev/null @@ -1,121 +0,0 @@ -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// index.ts -var nodejs_build_exports = {}; -__export(nodejs_build_exports, { - handler: () => handler -}); -module.exports = __toCommonJS(nodejs_build_exports); -var import_client_codebuild = require("@aws-sdk/client-codebuild"); -var cb = new import_client_codebuild.CodeBuildClient({}); -var handler = async (event, context) => { - console.log(JSON.stringify(event)); - try { - if (event.RequestType == "Create" || event.RequestType == "Update") { - const props = event.ResourceProperties; - const build = await cb.send(new import_client_codebuild.StartBuildCommand({ - projectName: props.codeBuildProjectName, - environmentVariablesOverride: [ - { - name: "input", - value: JSON.stringify(props.sources.map((source) => ({ - assetUrl: `s3://${source.sourceBucketName}/${source.sourceObjectKey}`, - extractPath: source.extractPath, - commands: (source.commands ?? []).join(" && ") - }))) - }, - { - name: "buildCommands", - value: props.buildCommands.join(" && ") - }, - { - name: "destinationBucketName", - value: props.destinationBucketName - }, - { - name: "destinationObjectKey", - value: props.destinationObjectKey - }, - { - name: "workingDirectory", - value: props.workingDirectory - }, - { - name: "outputSourceDirectory", - value: props.outputSourceDirectory - }, - { - name: "projectName", - value: props.codeBuildProjectName - }, - { - name: "responseURL", - value: event.ResponseURL - }, - { - name: "stackId", - value: event.StackId - }, - { - name: "requestId", - value: event.RequestId - }, - { - name: "logicalResourceId", - value: event.LogicalResourceId - }, - ...Object.entries(props.environment ?? {}).map(([name, value]) => ({ - name, - value - })) - ] - })); - } else { - await sendStatus("SUCCESS", event, context); - } - } catch (e) { - console.log(e); - const err = e; - await sendStatus("FAILED", event, context, err.message); - } -}; -var sendStatus = async (status, event, context, reason) => { - const responseBody = JSON.stringify({ - Status: status, - Reason: reason ?? "See the details in CloudWatch Log Stream: " + context.logStreamName, - PhysicalResourceId: context.logStreamName, - StackId: event.StackId, - RequestId: event.RequestId, - LogicalResourceId: event.LogicalResourceId, - NoEcho: false, - Data: {} - }); - await fetch(event.ResponseURL, { - method: "PUT", - body: responseBody, - headers: { - "Content-Type": "", - "Content-Length": responseBody.length.toString() - } - }); -}; -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = { - handler -}); diff --git a/test/nodejs-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js b/test/nodejs-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js new file mode 100644 index 0000000..c1c4d99 --- /dev/null +++ b/test/nodejs-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js @@ -0,0 +1,164 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// index.ts +var trigger_codebuild_exports = {}; +__export(trigger_codebuild_exports, { + handler: () => handler +}); +module.exports = __toCommonJS(trigger_codebuild_exports); +var import_client_codebuild = require("@aws-sdk/client-codebuild"); +var cb = new import_client_codebuild.CodeBuildClient({}); +var handler = async (event, context) => { + console.log(JSON.stringify(event)); + try { + if (event.RequestType == "Create" || event.RequestType == "Update") { + const props = event.ResourceProperties; + let command; + switch (props.type) { + case "NodejsBuild": + command = new import_client_codebuild.StartBuildCommand({ + projectName: props.codeBuildProjectName, + environmentVariablesOverride: [ + { + name: "input", + value: JSON.stringify(props.sources.map((source) => ({ + assetUrl: `s3://${source.sourceBucketName}/${source.sourceObjectKey}`, + extractPath: source.extractPath, + commands: (source.commands ?? []).join(" && ") + }))) + }, + { + name: "buildCommands", + value: props.buildCommands.join(" && ") + }, + { + name: "destinationBucketName", + value: props.destinationBucketName + }, + { + name: "destinationObjectKey", + value: props.destinationObjectKey + }, + { + name: "workingDirectory", + value: props.workingDirectory + }, + { + name: "outputSourceDirectory", + value: props.outputSourceDirectory + }, + { + name: "projectName", + value: props.codeBuildProjectName + }, + { + name: "responseURL", + value: event.ResponseURL + }, + { + name: "stackId", + value: event.StackId + }, + { + name: "requestId", + value: event.RequestId + }, + { + name: "logicalResourceId", + value: event.LogicalResourceId + }, + ...Object.entries(props.environment ?? {}).map(([name, value]) => ({ + name, + value + })) + ] + }); + break; + case "SociIndexBuild": + command = new import_client_codebuild.StartBuildCommand({ + projectName: props.codeBuildProjectName, + environmentVariablesOverride: [ + { + name: "repositoryName", + value: props.repositoryName + }, + { + name: "imageTag", + value: props.imageTag + }, + { + name: "projectName", + value: props.codeBuildProjectName + }, + { + name: "responseURL", + value: event.ResponseURL + }, + { + name: "stackId", + value: event.StackId + }, + { + name: "requestId", + value: event.RequestId + }, + { + name: "logicalResourceId", + value: event.LogicalResourceId + } + ] + }); + break; + default: + throw new Error(`invalid event type ${props}}`); + } + const build = await cb.send(command); + } else { + await sendStatus("SUCCESS", event, context); + } + } catch (e) { + console.log(e); + const err = e; + await sendStatus("FAILED", event, context, err.message); + } +}; +var sendStatus = async (status, event, context, reason) => { + const responseBody = JSON.stringify({ + Status: status, + Reason: reason ?? "See the details in CloudWatch Log Stream: " + context.logStreamName, + PhysicalResourceId: context.logStreamName, + StackId: event.StackId, + RequestId: event.RequestId, + LogicalResourceId: event.LogicalResourceId, + NoEcho: false, + Data: {} + }); + await fetch(event.ResponseURL, { + method: "PUT", + body: responseBody, + headers: { + "Content-Type": "", + "Content-Length": responseBody.length.toString() + } + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + handler +}); diff --git a/test/nodejs-build.integ.snapshot/manifest.json b/test/nodejs-build.integ.snapshot/manifest.json index ab1574c..7cbc042 100644 --- a/test/nodejs-build.integ.snapshot/manifest.json +++ b/test/nodejs-build.integ.snapshot/manifest.json @@ -31,13 +31,13 @@ { "type": "aws:cdk:asset", "data": { - "path": "asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b", - "id": "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b", + "path": "asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "id": "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", "packaging": "zip", - "sourceHash": "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b", - "s3BucketParameter": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8", - "s3KeyParameter": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C", - "artifactHashParameter": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bArtifactHash156A92A2" + "sourceHash": "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "s3BucketParameter": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8", + "s3KeyParameter": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034", + "artifactHashParameter": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363ArtifactHash63F36728" } }, { @@ -125,22 +125,22 @@ "data": "AssetParameterse57c1acaa363d7d2b81736776007a7091bc73dff4aeb8135627c4511a51e7dcaArtifactHashAC8BF1CD" } ], - "/NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3Bucket": [ + "/NodejsBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3Bucket": [ { "type": "aws:cdk:logicalId", - "data": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8" + "data": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8" } ], - "/NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3VersionKey": [ + "/NodejsBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3VersionKey": [ { "type": "aws:cdk:logicalId", - "data": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C" + "data": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" } ], - "/NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/ArtifactHash": [ + "/NodejsBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/ArtifactHash": [ { "type": "aws:cdk:logicalId", - "data": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bArtifactHash156A92A2" + "data": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363ArtifactHash63F36728" } ], "/NodejsBuildIntegTest/AssetParameters/72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9d/S3Bucket": [ diff --git a/test/nodejs-build.integ.snapshot/tree.json b/test/nodejs-build.integ.snapshot/tree.json index b697d37..fdc2749 100644 --- a/test/nodejs-build.integ.snapshot/tree.json +++ b/test/nodejs-build.integ.snapshot/tree.json @@ -223,13 +223,13 @@ "version": "10.0.5" } }, - "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b": { - "id": "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b", - "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b", + "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363": { + "id": "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "path": "NodejsBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", "children": { "S3Bucket": { "id": "S3Bucket", - "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3Bucket", + "path": "NodejsBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3Bucket", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", "version": "2.38.0" @@ -237,7 +237,7 @@ }, "S3VersionKey": { "id": "S3VersionKey", - "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3VersionKey", + "path": "NodejsBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3VersionKey", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", "version": "2.38.0" @@ -245,7 +245,7 @@ }, "ArtifactHash": { "id": "ArtifactHash", - "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/ArtifactHash", + "path": "NodejsBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/ArtifactHash", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", "version": "2.38.0" @@ -600,7 +600,7 @@ }, "environment": { "type": "LINUX_CONTAINER", - "image": "aws/codebuild/standard:6.0", + "image": "aws/codebuild/standard:7.0", "imagePullCredentialsType": "CODEBUILD", "privilegedMode": false, "computeType": "BUILD_GENERAL1_SMALL" @@ -937,7 +937,7 @@ "aws:cdk:cloudformation:props": { "code": { "s3Bucket": { - "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8" + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8" }, "s3Key": { "Fn::Join": [ @@ -950,7 +950,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C" + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" } ] } @@ -963,7 +963,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C" + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" } ] } diff --git a/test/soci-index-build.integ.snapshot/SociIndexBuildIntegTest.template.json b/test/soci-index-build.integ.snapshot/SociIndexBuildIntegTest.template.json new file mode 100644 index 0000000..7f38bd7 --- /dev/null +++ b/test/soci-index-build.integ.snapshot/SociIndexBuildIntegTest.template.json @@ -0,0 +1,360 @@ +{ + "Resources": { + "Image1Index415B9527": { + "Type": "Custom::CDKSociIndexBuild", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f306AEFF37", + "Arn" + ] + }, + "type": "SociIndexBuild", + "imageTag": "47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2", + "repositoryName": "aws-cdk/assets", + "codeBuildProjectName": { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleB008BAA4": { + "Type": "AWS::IAM::Role", + "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" + ] + ] + } + ] + } + }, + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleDefaultPolicyFECC51DC": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "codebuild:StartBuild", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleDefaultPolicyFECC51DC", + "Roles": [ + { + "Ref": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleB008BAA4" + } + ] + } + }, + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f306AEFF37": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8" + }, + "S3Key": { + "Fn::Join": [ + "", + [ + { + "Fn::Select": [ + 0, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" + } + ] + } + ] + }, + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" + } + ] + } + ] + } + ] + ] + } + }, + "Role": { + "Fn::GetAtt": [ + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleB008BAA4", + "Arn" + ] + }, + "Handler": "index.handler", + "Runtime": "nodejs18.x", + "Timeout": 300 + }, + "DependsOn": [ + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleDefaultPolicyFECC51DC", + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleB008BAA4" + ] + }, + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRole33DABF16": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRoleDefaultPolicyC13902A7": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + }, + "-*" + ] + ] + } + }, + { + "Action": [ + "ecr:BatchCheckLayerAvailability", + "ecr:BatchGetImage", + "ecr:CompleteLayerUpload", + "ecr:DescribeImages", + "ecr:GetDownloadUrlForLayer", + "ecr:InitiateLayerUpload", + "ecr:PutImage", + "ecr:UploadLayerPart" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ecr:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":repository/aws-cdk/assets" + ] + ] + } + }, + { + "Action": "ecr:GetAuthorizationToken", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRoleDefaultPolicyC13902A7", + "Roles": [ + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRole33DABF16" + } + ] + } + }, + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD": { + "Type": "AWS::CodeBuild::Project", + "Properties": { + "Artifacts": { + "Type": "NO_ARTIFACTS" + }, + "Environment": { + "ComputeType": "BUILD_GENERAL1_SMALL", + "Image": "aws/codebuild/standard:7.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": false, + "Type": "LINUX_CONTAINER" + }, + "ServiceRole": { + "Fn::GetAtt": [ + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRole33DABF16", + "Arn" + ] + }, + "Source": { + "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"current_dir=$(pwd)\",\n \"wget --quiet -O soci-wrapper.tar.gz https://github.com/tmokmss/soci-wrapper/releases/download/v0.1.0/soci-wrapper-v0.1.0-linux-amd64.tar.gz\",\n \"tar -xvzf soci-wrapper.tar.gz\",\n \"\",\n \"export AWS_ACCOUNT=$(aws sts get-caller-identity --query \\\"Account\\\" --output text)\",\n \"export REGISTRY_USER=AWS\",\n \"export REGISTRY_PASSWORD=$(aws ecr get-login-password --region $AWS_REGION)\",\n \"export REGISTRY=$AWS_ACCOUNT.dkr.ecr.$AWS_REGION.amazonaws.com\",\n \"aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $REGISTRY\",\n \"REPO_NAME=$repositoryName\",\n \"IMAGE_TAG=$imageTag\",\n \"DIGEST=$(aws ecr describe-images --repository-name $REPO_NAME --image-ids imageTag=$IMAGE_TAG --query imageDetails[0].imageDigest --output text)\",\n \"./soci-wrapper $REPO_NAME $DIGEST $AWS_REGION $AWS_ACCOUNT\"\n ]\n },\n \"post_build\": {\n \"commands\": [\n \"echo Build completed on `date`\",\n \"\\nSTATUS='SUCCESS'\\nif [ $CODEBUILD_BUILD_SUCCEEDING -ne 1 ] # Test if the build is failing\\nthen\\nSTATUS='FAILED'\\nREASON=\\\"deploy-time-build failed. See CloudWatch Log stream for the detailed reason: \\nhttps://$AWS_REGION.console.aws.amazon.com/cloudwatch/home?region=$AWS_REGION#logsV2:log-groups/log-group/\\\\$252Faws\\\\$252Fcodebuild\\\\$252F$projectName/log-events/$CODEBUILD_LOG_PATH\\\"\\nfi\\ncat < payload.json\\n{\\n \\\"StackId\\\": \\\"$stackId\\\",\\n \\\"RequestId\\\": \\\"$requestId\\\",\\n \\\"LogicalResourceId\\\":\\\"$logicalResourceId\\\",\\n \\\"PhysicalResourceId\\\": \\\"$imageTag\\\",\\n \\\"Status\\\": \\\"$STATUS\\\",\\n \\\"Reason\\\": \\\"$REASON\\\"\\n}\\nEOF\\ncurl -vv -i -X PUT -H 'Content-Type:' -d \\\"@payload.json\\\" \\\"$responseURL\\\"\\n \"\n ]\n }\n }\n}", + "Type": "NO_SOURCE" + }, + "Cache": { + "Type": "NO_CACHE" + }, + "EncryptionKey": "alias/aws/s3" + } + }, + "Image2Index42EE498C": { + "Type": "Custom::CDKSociIndexBuild", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f306AEFF37", + "Arn" + ] + }, + "type": "SociIndexBuild", + "imageTag": "3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2", + "repositoryName": "aws-cdk/assets", + "codeBuildProjectName": { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Parameters": { + "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8": { + "Type": "String", + "Description": "S3 bucket for asset \"b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363\"" + }, + "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034": { + "Type": "String", + "Description": "S3 key for asset version \"b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363\"" + }, + "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363ArtifactHash63F36728": { + "Type": "String", + "Description": "Artifact hash for asset \"b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363\"" + } + } +} \ No newline at end of file diff --git a/test/soci-index-build.integ.snapshot/TestDefaultTestDeployAssert12909640.template.json b/test/soci-index-build.integ.snapshot/TestDefaultTestDeployAssert12909640.template.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/test/soci-index-build.integ.snapshot/TestDefaultTestDeployAssert12909640.template.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/soci-index-build.integ.snapshot/asset.3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2/Dockerfile b/test/soci-index-build.integ.snapshot/asset.3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2/Dockerfile new file mode 100644 index 0000000..c407d6b --- /dev/null +++ b/test/soci-index-build.integ.snapshot/asset.3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx:1.25.1 +# create dummy file to change the size of a image +ARG DUMMY_FILE_SIZE_MB="10" +# RUN fallocate -l ${DUMMY_FILE_SIZE_MB} dummy.img +RUN dd if=/dev/zero of=dummy.img bs=1M count=${DUMMY_FILE_SIZE_MB} diff --git a/test/soci-index-build.integ.snapshot/asset.47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2/Dockerfile b/test/soci-index-build.integ.snapshot/asset.47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2/Dockerfile new file mode 100644 index 0000000..c407d6b --- /dev/null +++ b/test/soci-index-build.integ.snapshot/asset.47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx:1.25.1 +# create dummy file to change the size of a image +ARG DUMMY_FILE_SIZE_MB="10" +# RUN fallocate -l ${DUMMY_FILE_SIZE_MB} dummy.img +RUN dd if=/dev/zero of=dummy.img bs=1M count=${DUMMY_FILE_SIZE_MB} diff --git a/test/soci-index-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js b/test/soci-index-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js new file mode 100644 index 0000000..c1c4d99 --- /dev/null +++ b/test/soci-index-build.integ.snapshot/asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/index.js @@ -0,0 +1,164 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// index.ts +var trigger_codebuild_exports = {}; +__export(trigger_codebuild_exports, { + handler: () => handler +}); +module.exports = __toCommonJS(trigger_codebuild_exports); +var import_client_codebuild = require("@aws-sdk/client-codebuild"); +var cb = new import_client_codebuild.CodeBuildClient({}); +var handler = async (event, context) => { + console.log(JSON.stringify(event)); + try { + if (event.RequestType == "Create" || event.RequestType == "Update") { + const props = event.ResourceProperties; + let command; + switch (props.type) { + case "NodejsBuild": + command = new import_client_codebuild.StartBuildCommand({ + projectName: props.codeBuildProjectName, + environmentVariablesOverride: [ + { + name: "input", + value: JSON.stringify(props.sources.map((source) => ({ + assetUrl: `s3://${source.sourceBucketName}/${source.sourceObjectKey}`, + extractPath: source.extractPath, + commands: (source.commands ?? []).join(" && ") + }))) + }, + { + name: "buildCommands", + value: props.buildCommands.join(" && ") + }, + { + name: "destinationBucketName", + value: props.destinationBucketName + }, + { + name: "destinationObjectKey", + value: props.destinationObjectKey + }, + { + name: "workingDirectory", + value: props.workingDirectory + }, + { + name: "outputSourceDirectory", + value: props.outputSourceDirectory + }, + { + name: "projectName", + value: props.codeBuildProjectName + }, + { + name: "responseURL", + value: event.ResponseURL + }, + { + name: "stackId", + value: event.StackId + }, + { + name: "requestId", + value: event.RequestId + }, + { + name: "logicalResourceId", + value: event.LogicalResourceId + }, + ...Object.entries(props.environment ?? {}).map(([name, value]) => ({ + name, + value + })) + ] + }); + break; + case "SociIndexBuild": + command = new import_client_codebuild.StartBuildCommand({ + projectName: props.codeBuildProjectName, + environmentVariablesOverride: [ + { + name: "repositoryName", + value: props.repositoryName + }, + { + name: "imageTag", + value: props.imageTag + }, + { + name: "projectName", + value: props.codeBuildProjectName + }, + { + name: "responseURL", + value: event.ResponseURL + }, + { + name: "stackId", + value: event.StackId + }, + { + name: "requestId", + value: event.RequestId + }, + { + name: "logicalResourceId", + value: event.LogicalResourceId + } + ] + }); + break; + default: + throw new Error(`invalid event type ${props}}`); + } + const build = await cb.send(command); + } else { + await sendStatus("SUCCESS", event, context); + } + } catch (e) { + console.log(e); + const err = e; + await sendStatus("FAILED", event, context, err.message); + } +}; +var sendStatus = async (status, event, context, reason) => { + const responseBody = JSON.stringify({ + Status: status, + Reason: reason ?? "See the details in CloudWatch Log Stream: " + context.logStreamName, + PhysicalResourceId: context.logStreamName, + StackId: event.StackId, + RequestId: event.RequestId, + LogicalResourceId: event.LogicalResourceId, + NoEcho: false, + Data: {} + }); + await fetch(event.ResponseURL, { + method: "PUT", + body: responseBody, + headers: { + "Content-Type": "", + "Content-Length": responseBody.length.toString() + } + }); +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + handler +}); diff --git a/test/soci-index-build.integ.snapshot/cdk.out b/test/soci-index-build.integ.snapshot/cdk.out new file mode 100644 index 0000000..588d7b2 --- /dev/null +++ b/test/soci-index-build.integ.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"20.0.0"} \ No newline at end of file diff --git a/test/soci-index-build.integ.snapshot/integ.json b/test/soci-index-build.integ.snapshot/integ.json new file mode 100644 index 0000000..e931195 --- /dev/null +++ b/test/soci-index-build.integ.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "20.0.0", + "testCases": { + "Test/DefaultTest": { + "stacks": [ + "SociIndexBuildIntegTest" + ], + "diffAssets": true, + "assertionStack": "TestDefaultTestDeployAssert12909640" + } + } +} \ No newline at end of file diff --git a/test/soci-index-build.integ.snapshot/manifest.json b/test/soci-index-build.integ.snapshot/manifest.json new file mode 100644 index 0000000..96dfd71 --- /dev/null +++ b/test/soci-index-build.integ.snapshot/manifest.json @@ -0,0 +1,139 @@ +{ + "version": "20.0.0", + "artifacts": { + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + }, + "SociIndexBuildIntegTest": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "SociIndexBuildIntegTest.template.json", + "validateOnSynth": false + }, + "metadata": { + "/SociIndexBuildIntegTest": [ + { + "type": "aws:cdk:asset", + "data": { + "repositoryName": "aws-cdk/assets", + "imageTag": "47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2", + "id": "47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2", + "packaging": "container-image", + "path": "asset.47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2", + "sourceHash": "47892ef0b0672c9b0d3a89eec073d382c4c3599f8d9f2993f6b675116886bdc2", + "buildArgs": { + "DUMMY_FILE_SIZE_MB": "10" + } + } + }, + { + "type": "aws:cdk:asset", + "data": { + "path": "asset.b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "id": "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "packaging": "zip", + "sourceHash": "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "s3BucketParameter": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8", + "s3KeyParameter": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034", + "artifactHashParameter": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363ArtifactHash63F36728" + } + }, + { + "type": "aws:cdk:asset", + "data": { + "repositoryName": "aws-cdk/assets", + "imageTag": "3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2", + "id": "3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2", + "packaging": "container-image", + "path": "asset.3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2", + "sourceHash": "3c364bb3b8fa32d39d28ce9761167263caf815b0bafa3d674aa36fd51e76adf2", + "buildArgs": { + "DUMMY_FILE_SIZE_MB": "500" + } + } + } + ], + "/SociIndexBuildIntegTest/Image1/Index/Resource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "Image1Index415B9527" + } + ], + "/SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleB008BAA4" + } + ], + "/SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleDefaultPolicyFECC51DC" + } + ], + "/SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f306AEFF37" + } + ], + "/SociIndexBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3Bucket": [ + { + "type": "aws:cdk:logicalId", + "data": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8" + } + ], + "/SociIndexBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3VersionKey": [ + { + "type": "aws:cdk:logicalId", + "data": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" + } + ], + "/SociIndexBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/ArtifactHash": [ + { + "type": "aws:cdk:logicalId", + "data": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363ArtifactHash63F36728" + } + ], + "/SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRole33DABF16" + } + ], + "/SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRoleDefaultPolicyC13902A7" + } + ], + "/SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + } + ], + "/SociIndexBuildIntegTest/Image2/Index/Resource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "Image2Index42EE498C" + } + ] + }, + "displayName": "SociIndexBuildIntegTest" + }, + "TestDefaultTestDeployAssert12909640": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "TestDefaultTestDeployAssert12909640.template.json", + "validateOnSynth": false + }, + "displayName": "Test/DefaultTest/DeployAssert" + } + } +} \ No newline at end of file diff --git a/test/soci-index-build.integ.snapshot/tree.json b/test/soci-index-build.integ.snapshot/tree.json new file mode 100644 index 0000000..37471d3 --- /dev/null +++ b/test/soci-index-build.integ.snapshot/tree.json @@ -0,0 +1,705 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + }, + "SociIndexBuildIntegTest": { + "id": "SociIndexBuildIntegTest", + "path": "SociIndexBuildIntegTest", + "children": { + "Image1": { + "id": "Image1", + "path": "SociIndexBuildIntegTest/Image1", + "children": { + "Image": { + "id": "Image", + "path": "SociIndexBuildIntegTest/Image1/Image", + "children": { + "Staging": { + "id": "Staging", + "path": "SociIndexBuildIntegTest/Image1/Image/Staging", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "2.38.0" + } + }, + "Repository": { + "id": "Repository", + "path": "SociIndexBuildIntegTest/Image1/Image/Repository", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ecr.RepositoryBase", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ecr_assets.DockerImageAsset", + "version": "2.38.0" + } + }, + "Index": { + "id": "Index", + "path": "SociIndexBuildIntegTest/Image1/Index", + "children": { + "CustomResourceHandler": { + "id": "CustomResourceHandler", + "path": "SociIndexBuildIntegTest/Image1/Index/CustomResourceHandler", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", + "version": "2.38.0" + } + }, + "Project": { + "id": "Project", + "path": "SociIndexBuildIntegTest/Image1/Index/Project", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + }, + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/Image1/Index/Resource", + "children": { + "Default": { + "id": "Default", + "path": "SociIndexBuildIntegTest/Image1/Index/Resource/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.CustomResource", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + }, + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3": { + "id": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/ServiceRole", + "children": { + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "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" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "2.38.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/ServiceRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/ServiceRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": "codebuild:StartBuild", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "policyName": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleDefaultPolicyFECC51DC", + "roles": [ + { + "Ref": "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleB008BAA4" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "2.38.0" + } + }, + "Code": { + "id": "Code", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/Code", + "children": { + "Stage": { + "id": "Stage", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/Code/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "2.38.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/Code/AssetBucket", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketBase", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3_assets.Asset", + "version": "2.38.0" + } + }, + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Function", + "aws:cdk:cloudformation:props": { + "code": { + "s3Bucket": { + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3BucketF9CF99E8" + }, + "s3Key": { + "Fn::Join": [ + "", + [ + { + "Fn::Select": [ + 0, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" + } + ] + } + ] + }, + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParametersb49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363S3VersionKey6F0A4034" + } + ] + } + ] + } + ] + ] + } + }, + "role": { + "Fn::GetAtt": [ + "DeployTimeBuildCustomResourceHandlerdb740fd554364a848a09e6dfcd01f4f3ServiceRoleB008BAA4", + "Arn" + ] + }, + "handler": "index.handler", + "runtime": "nodejs18.x", + "timeout": 300 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.Function", + "version": "2.38.0" + } + }, + "AssetParameters": { + "id": "AssetParameters", + "path": "SociIndexBuildIntegTest/AssetParameters", + "children": { + "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363": { + "id": "b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "path": "SociIndexBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363", + "children": { + "S3Bucket": { + "id": "S3Bucket", + "path": "SociIndexBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3Bucket", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "2.38.0" + } + }, + "S3VersionKey": { + "id": "S3VersionKey", + "path": "SociIndexBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/S3VersionKey", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "2.38.0" + } + }, + "ArtifactHash": { + "id": "ArtifactHash", + "path": "SociIndexBuildIntegTest/AssetParameters/b49cc8147b0bf86afefc1c551a4b5cf9165167cf31a5d50e4bf169f944f6a363/ArtifactHash", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + }, + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c": { + "id": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c", + "path": "SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c", + "children": { + "Role": { + "id": "Role", + "path": "SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Role", + "children": { + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "2.38.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cFF24E8AD" + }, + "-*" + ] + ] + } + }, + { + "Action": [ + "ecr:BatchCheckLayerAvailability", + "ecr:BatchGetImage", + "ecr:CompleteLayerUpload", + "ecr:DescribeImages", + "ecr:GetDownloadUrlForLayer", + "ecr:InitiateLayerUpload", + "ecr:PutImage", + "ecr:UploadLayerPart" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ecr:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":repository/aws-cdk/assets" + ] + ] + } + }, + { + "Action": "ecr:GetAuthorizationToken", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "policyName": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRoleDefaultPolicyC13902A7", + "roles": [ + { + "Ref": "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRole33DABF16" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "2.38.0" + } + }, + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3c/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodeBuild::Project", + "aws:cdk:cloudformation:props": { + "artifacts": { + "type": "NO_ARTIFACTS" + }, + "environment": { + "type": "LINUX_CONTAINER", + "image": "aws/codebuild/standard:7.0", + "imagePullCredentialsType": "CODEBUILD", + "privilegedMode": false, + "computeType": "BUILD_GENERAL1_SMALL" + }, + "serviceRole": { + "Fn::GetAtt": [ + "SociIndexBuild024cf76a10034aa4aa4b12c32c09ca3cRole33DABF16", + "Arn" + ] + }, + "source": { + "type": "NO_SOURCE", + "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"current_dir=$(pwd)\",\n \"wget --quiet -O soci-wrapper.tar.gz https://github.com/tmokmss/soci-wrapper/releases/download/v0.1.0/soci-wrapper-v0.1.0-linux-amd64.tar.gz\",\n \"tar -xvzf soci-wrapper.tar.gz\",\n \"\",\n \"export AWS_ACCOUNT=$(aws sts get-caller-identity --query \\\"Account\\\" --output text)\",\n \"export REGISTRY_USER=AWS\",\n \"export REGISTRY_PASSWORD=$(aws ecr get-login-password --region $AWS_REGION)\",\n \"export REGISTRY=$AWS_ACCOUNT.dkr.ecr.$AWS_REGION.amazonaws.com\",\n \"aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $REGISTRY\",\n \"REPO_NAME=$repositoryName\",\n \"IMAGE_TAG=$imageTag\",\n \"DIGEST=$(aws ecr describe-images --repository-name $REPO_NAME --image-ids imageTag=$IMAGE_TAG --query imageDetails[0].imageDigest --output text)\",\n \"./soci-wrapper $REPO_NAME $DIGEST $AWS_REGION $AWS_ACCOUNT\"\n ]\n },\n \"post_build\": {\n \"commands\": [\n \"echo Build completed on `date`\",\n \"\\nSTATUS='SUCCESS'\\nif [ $CODEBUILD_BUILD_SUCCEEDING -ne 1 ] # Test if the build is failing\\nthen\\nSTATUS='FAILED'\\nREASON=\\\"deploy-time-build failed. See CloudWatch Log stream for the detailed reason: \\nhttps://$AWS_REGION.console.aws.amazon.com/cloudwatch/home?region=$AWS_REGION#logsV2:log-groups/log-group/\\\\$252Faws\\\\$252Fcodebuild\\\\$252F$projectName/log-events/$CODEBUILD_LOG_PATH\\\"\\nfi\\ncat < payload.json\\n{\\n \\\"StackId\\\": \\\"$stackId\\\",\\n \\\"RequestId\\\": \\\"$requestId\\\",\\n \\\"LogicalResourceId\\\":\\\"$logicalResourceId\\\",\\n \\\"PhysicalResourceId\\\": \\\"$imageTag\\\",\\n \\\"Status\\\": \\\"$STATUS\\\",\\n \\\"Reason\\\": \\\"$REASON\\\"\\n}\\nEOF\\ncurl -vv -i -X PUT -H 'Content-Type:' -d \\\"@payload.json\\\" \\\"$responseURL\\\"\\n \"\n ]\n }\n }\n}" + }, + "cache": { + "type": "NO_CACHE" + }, + "encryptionKey": "alias/aws/s3" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.CfnProject", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.Project", + "version": "2.38.0" + } + }, + "Image2": { + "id": "Image2", + "path": "SociIndexBuildIntegTest/Image2", + "children": { + "Image": { + "id": "Image", + "path": "SociIndexBuildIntegTest/Image2/Image", + "children": { + "Staging": { + "id": "Staging", + "path": "SociIndexBuildIntegTest/Image2/Image/Staging", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "2.38.0" + } + }, + "Repository": { + "id": "Repository", + "path": "SociIndexBuildIntegTest/Image2/Image/Repository", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ecr.RepositoryBase", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ecr_assets.DockerImageAsset", + "version": "2.38.0" + } + }, + "Index": { + "id": "Index", + "path": "SociIndexBuildIntegTest/Image2/Index", + "children": { + "CustomResourceHandler": { + "id": "CustomResourceHandler", + "path": "SociIndexBuildIntegTest/Image2/Index/CustomResourceHandler", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", + "version": "2.38.0" + } + }, + "Project": { + "id": "Project", + "path": "SociIndexBuildIntegTest/Image2/Index/Project", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + }, + "Resource": { + "id": "Resource", + "path": "SociIndexBuildIntegTest/Image2/Index/Resource", + "children": { + "Default": { + "id": "Default", + "path": "SociIndexBuildIntegTest/Image2/Index/Resource/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.CustomResource", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "2.38.0" + } + }, + "Test": { + "id": "Test", + "path": "Test", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "Test/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "Test/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.0.5" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "Test/DefaultTest/DeployAssert", + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "2.38.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "2.38.0-alpha.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "2.38.0-alpha.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "2.38.0" + } + } +} \ No newline at end of file