diff --git a/API.md b/API.md index 2448765f..10d87bb4 100644 --- a/API.md +++ b/API.md @@ -1,97 +1,3 @@ -# Deploy NextJS with CDK - -[![View on Construct Hub](https://constructs.dev/badge?package=cdk-nextjs-standalone)](https://constructs.dev/packages/cdk-nextjs-standalone) - -## What is this? - -A CDK construct to deploy a NextJS app using AWS CDK. -Supported NextJs versions: >=12.3.0+ (includes 13.0.0+) - -Uses the [standalone output](https://nextjs.org/docs/advanced-features/output-file-tracing) build mode. - -## Quickstart -```ts -import { App, Stack, StackProps } from 'aws-cdk-lib'; -import { Construct } from 'constructs'; -import { Nextjs } from 'cdk-nextjs-standalone'; - -class WebStack extends Stack { - constructor(scope: Construct, id: string, props?: StackProps) { - super(scope, id, props); - const nextjs = new Nextjs(this, 'Nextjs', { - nextjsPath: './web', // relative path from your project root to NextJS - }); - new CfnOutput(this, "CloudFrontDistributionDomain", { - value: nextjs.distribution.distributionDomain, - }); - } -} - -const app = new App(); -new WebStack(app, 'web'); -``` - -## Important Notes -- Due to CloudFront's Distribution Cache Behavior pattern matching limitations, a cache behavior will be created for each top level file or directory in your `public/` folder. CloudFront has a soft limit of [25 cache behaviors per distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html#limits-web-distributions). Therefore, it's recommended to include all assets that can be under a top level folder like `public/static/`. Learn more in open-next docs [here](https://github.com/sst/open-next/blob/main/README.md#workaround-create-one-cache-behavior-per-top-level-file-and-folder-in-public-aws-specific). - -## Documentation - -Available on [Construct Hub](https://constructs.dev/packages/cdk-nextjs-standalone/). - -## Examples - -See example CDK apps [here](./examples) including: -- App Router -- Pages Router -- App/Pages Router -- High Security -- Multiple Sites -To deploy an example, make sure to read the [README.md](./examples/README.md) - -### Discord Chat - -We're in the #open-next channel on the [Serverless Stack Discord](https://discord.gg/sst). - -## About - -Deploys a NextJs static site with server-side rendering and API support. Uses AWS lambda and CloudFront. - -There is a new (since Next 12) [standalone output mode which uses output tracing](https://nextjs.org/docs/advanced-features/output-file-tracing) to generate a minimal server and static files. -This standalone server can be converted into a CloudFront distribution and a lambda handler that handles SSR, API, and routing. - -The CloudFront default origin first checks S3 for static files and falls back to an HTTP origin using a lambda function URL. - -## Benefits - -This approach is most compatible with new NextJs features such as ESM configuration, [middleware](https://nextjs.org/docs/advanced-features/middleware), next-auth, and React server components ("appDir"). - -The unmaintained [@serverless-nextjs project](https://github.com/serverless-nextjs/serverless-next.js) uses the deprecated `serverless` NextJs build target which [prevents the use of new features](https://github.com/serverless-nextjs/serverless-next.js/pull/2478). -This construct was created to use the new `standalone` output build and newer AWS features like lambda function URLs and fallback origins. - -You may want to look at [Serverless Stack](https://sst.dev) and its [NextjsSite](https://docs.sst.dev/constructs/NextjsSite) construct for an improved developer experience if you are building serverless applications on CDK. - -## Dependencies - -Built on top of [open-next](https://open-next.js.org/), which was partially built using the original core of cdk-nextjs-standalone. - -## Heavily based on - -- [Open-next](https://open-next.js.org/) -- -- -- -- [Serverless Stack](https://github.com/serverless-stack/sst) - - [RemixSite](https://github.com/serverless-stack/sst/blob/master/packages/resources/src/NextjsSite.ts) construct - - [NextjsSite](https://github.com/serverless-stack/sst/blob/master/packages/resources/src/RemixSite.ts) construct - -## Contribute - -See [Contribute](./docs/contribute.md). - -## Breaking changes - -See [Major Changes](./docs/major-changes.md). - # API Reference ## Constructs @@ -1605,6 +1511,9 @@ NextjsImage.fromFunctionArn(scope: Construct, id: string, functionArn: string) Import a lambda function into the CDK using its ARN. +For `Function.addPermissions()` to work on this imported lambda, make sure that is +in the same account and region as the stack you are importing it into. + ###### `scope`Required - *Type:* constructs.Construct @@ -1633,6 +1542,9 @@ NextjsImage.fromFunctionAttributes(scope: Construct, id: string, attrs: Function Creates a Lambda function object which represents a function not defined within this stack. +For `Function.addPermissions()` to work on this imported lambda, set the sameEnvironment property to true +if this imported lambda is in the same account and region as the stack you are importing it into. + ###### `scope`Required - *Type:* constructs.Construct @@ -4919,6 +4831,7 @@ const optionalCertificateProps: OptionalCertificateProps = { ... } | --- | --- | --- | | certificateName | string | The Certificate name. | | domainName | string | Fully-qualified domain name to request a certificate for. | +| keyAlgorithm | aws-cdk-lib.aws_certificatemanager.KeyAlgorithm | Specifies the algorithm of the public and private key pair that your certificate uses to encrypt data. | | subjectAlternativeNames | string[] | Alternative domain names on your certificate. | | transparencyLoggingEnabled | boolean | Enable or disable transparency logging for this certificate. | | validation | aws-cdk-lib.aws_certificatemanager.CertificateValidation | How to validate this certificate. | @@ -4954,6 +4867,19 @@ May contain wildcards, such as ``*.domain.com``. --- +##### `keyAlgorithm`Optional + +```typescript +public readonly keyAlgorithm: KeyAlgorithm; +``` + +- *Type:* aws-cdk-lib.aws_certificatemanager.KeyAlgorithm +- *Default:* KeyAlgorithm.RSA_2048 + +Specifies the algorithm of the public and private key pair that your certificate uses to encrypt data. + +--- + ##### `subjectAlternativeNames`Optional ```typescript @@ -5020,6 +4946,7 @@ const optionalCloudFrontFunctionProps: OptionalCloudFrontFunctionProps = { ... } | code | aws-cdk-lib.aws_cloudfront.FunctionCode | The source code of the function. | | comment | string | A comment to describe the function. | | functionName | string | A name to identify the function. | +| runtime | aws-cdk-lib.aws_cloudfront.FunctionRuntime | The runtime environment for the function. | --- @@ -5061,6 +4988,19 @@ A name to identify the function. --- +##### `runtime`Optional + +```typescript +public readonly runtime: FunctionRuntime; +``` + +- *Type:* aws-cdk-lib.aws_cloudfront.FunctionRuntime +- *Default:* FunctionRuntime.JS_1_0 + +The runtime environment for the function. + +--- + ### OptionalCustomResourceProps OptionalCustomResourceProps. @@ -5617,6 +5557,9 @@ Whether to allow the Lambda to send all network traffic. If set to false, you must individually add traffic rules to allow the Lambda to connect to network targets. +Do not specify this property if the `securityGroups` or `securityGroup` property is set. +Instead, configure `allowAllOutbound` directly on the security group. + --- ##### `allowPublicSubnet`Optional @@ -6376,6 +6319,9 @@ Whether to allow the Lambda to send all network traffic. If set to false, you must individually add traffic rules to allow the Lambda to connect to network targets. +Do not specify this property if the `securityGroups` or `securityGroup` property is set. +Instead, configure `allowAllOutbound` directly on the security group. + --- ##### `allowPublicSubnet`Optional diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8dc79be..754c690d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,7 @@ lockfileVersion: '6.0' settings: - autoInstallPeers: true + autoInstallPeers: false excludeLinksFromLockfile: false importers: @@ -112,7 +112,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^27.1.5 - version: 27.1.5(@babel/core@7.23.7)(@types/jest@27.5.2)(esbuild@0.19.12)(jest@27.5.1)(typescript@4.9.5) + version: 27.1.5(@types/jest@27.5.2)(esbuild@0.19.12)(jest@27.5.1)(typescript@4.9.5) ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@18.19.14)(typescript@4.9.5) @@ -176,7 +176,7 @@ importers: version: 0.79.7(constructs@10.0.5) ts-jest: specifier: ^27.1.5 - version: 27.1.5(@babel/core@7.23.9)(@types/jest@27.5.2)(esbuild@0.19.12)(jest@27.5.1)(typescript@4.9.5) + version: 27.1.5(@types/jest@27.5.2)(esbuild@0.19.12)(jest@27.5.1)(typescript@4.9.5) ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@18.19.14)(typescript@4.9.5) @@ -902,29 +902,6 @@ packages: - supports-color dev: true - /@babel/core@7.23.9: - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.23.6: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} @@ -987,20 +964,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} @@ -1046,17 +1009,6 @@ packages: - supports-color dev: true - /@babel/helpers@7.23.9: - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -1074,14 +1026,6 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -1210,15 +1154,6 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - dev: true - /@babel/traverse@7.23.7: resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} @@ -1237,24 +1172,6 @@ packages: - supports-color dev: true - /@babel/traverse@7.23.9: - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} @@ -1264,15 +1181,6 @@ packages: to-fast-properties: 2.0.0 dev: true - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -1558,6 +1466,10 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@iarna/toml@2.2.5: + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + dev: true + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1848,6 +1760,35 @@ packages: fastq: 1.16.0 dev: true + /@oozcitak/dom@1.15.10: + resolution: {integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==} + engines: {node: '>=8.0'} + dependencies: + '@oozcitak/infra': 1.0.8 + '@oozcitak/url': 1.0.4 + '@oozcitak/util': 8.3.8 + dev: true + + /@oozcitak/infra@1.0.8: + resolution: {integrity: sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==} + engines: {node: '>=6.0'} + dependencies: + '@oozcitak/util': 8.3.8 + dev: true + + /@oozcitak/url@1.0.4: + resolution: {integrity: sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==} + engines: {node: '>=8.0'} + dependencies: + '@oozcitak/infra': 1.0.8 + '@oozcitak/util': 8.3.8 + dev: true + + /@oozcitak/util@8.3.8: + resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} + engines: {node: '>=8.0'} + dev: true + /@sinonjs/commons@1.8.6: resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: @@ -2800,6 +2741,10 @@ packages: is-string: 1.0.7 dev: true + /array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + dev: true + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -3218,6 +3163,17 @@ packages: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} dev: true + /comment-json@4.2.2: + resolution: {integrity: sha512-H8T+kl3nZesZu41zO2oNXIJWojNeK3mHxCLrsBNu6feksBXsgb+PtYz5daP5P86A0F3sz3840KVYehr04enISQ==} + engines: {node: '>= 6'} + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + dev: true + /commonmark@0.30.0: resolution: {integrity: sha512-j1yoUo4gxPND1JWV9xj5ELih0yMv1iCWDG6eEQIPLSWLxzCXiFoyS7kvB+WwU+tZMf4snwJMMtaubV0laFpiBA==} hasBin: true @@ -3853,7 +3809,7 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 @@ -3896,6 +3852,35 @@ packages: - supports-color dev: true + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} @@ -4101,6 +4086,10 @@ packages: micromatch: 4.0.5 dev: true + /fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + dev: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -4479,6 +4468,11 @@ packages: engines: {node: '>=8'} dev: true + /has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + dev: true + /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: @@ -4619,6 +4613,11 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + dev: true + /internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} @@ -5270,7 +5269,7 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: true @@ -5492,7 +5491,7 @@ packages: commonmark: 0.30.0 fast-glob: 3.3.2 jsii: 1.94.0 - semver: 7.5.4 + semver: 7.6.0 semver-intersect: 1.5.0 stream-json: 1.8.0 typescript: 3.9.10 @@ -5536,7 +5535,7 @@ packages: fast-deep-equal: 3.1.3 fs-extra: 10.1.0 log4js: 6.9.1 - semver: 7.5.4 + semver: 7.6.0 semver-intersect: 1.5.0 sort-json: 2.0.1 spdx-license-list: 6.8.0 @@ -6221,7 +6220,20 @@ packages: peerDependencies: constructs: ^10.0.0 dependencies: + '@iarna/toml': 2.2.5 + case: 1.6.3 + chalk: 4.1.2 + comment-json: 4.2.2 constructs: 10.0.5 + conventional-changelog-config-spec: 2.1.0 + fast-json-patch: 3.1.1 + glob: 8.1.0 + ini: 2.0.0 + semver: 7.6.0 + shx: 0.3.4 + xmlbuilder2: 3.1.1 + yaml: 2.3.4 + yargs: 17.7.2 dev: true bundledDependencies: - '@iarna/toml' @@ -6368,6 +6380,11 @@ packages: set-function-name: 2.0.1 dev: true + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6559,6 +6576,15 @@ packages: rechoir: 0.6.2 dev: true + /shx@0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.8 + shelljs: 0.8.5 + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -6943,7 +6969,7 @@ packages: typescript: 4.9.5 dev: true - /ts-jest@27.1.5(@babel/core@7.23.7)(@types/jest@27.5.2)(esbuild@0.19.12)(jest@27.5.1)(typescript@4.9.5): + /ts-jest@27.1.5(@types/jest@27.5.2)(esbuild@0.19.12)(jest@27.5.1)(typescript@4.9.5): resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -6964,43 +6990,6 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.7 - '@types/jest': 27.5.2 - bs-logger: 0.2.6 - esbuild: 0.19.12 - fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.2) - jest-util: 27.5.1 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.5.4 - typescript: 4.9.5 - yargs-parser: 20.2.9 - dev: true - - /ts-jest@27.1.5(@babel/core@7.23.9)(@types/jest@27.5.2)(esbuild@0.19.12)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' - esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/jest': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.23.9 '@types/jest': 27.5.2 bs-logger: 0.2.6 esbuild: 0.19.12 @@ -7446,6 +7435,16 @@ packages: resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} dev: true + /xmlbuilder2@3.1.1: + resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} + engines: {node: '>=12.0'} + dependencies: + '@oozcitak/dom': 1.15.10 + '@oozcitak/infra': 1.0.8 + '@oozcitak/util': 8.3.8 + js-yaml: 3.14.1 + dev: true + /xmlbuilder@11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} @@ -7478,6 +7477,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'}