From 84b93bc513693f326b766678e423c2d669d18b94 Mon Sep 17 00:00:00 2001 From: gonzalojaubert <111118818+gonzalojaubert@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:10:25 +0100 Subject: [PATCH] Improve global error handler (#1394) * improve GlobalErrorHandler * Add rush change file * Post-merge fixes * Update pnpm-lock.yaml --------- Co-authored-by: Castro Co-authored-by: Castro, Mario --- ...global_error_handler_2023-04-11-09-22.json | 10 + common/config/rush/pnpm-lock.yaml | 1048 ++++++++--------- .../src/booster-command-dispatcher.ts | 4 +- .../src/booster-event-processor.ts | 4 +- .../src/booster-global-error-dispatcher.ts | 25 +- .../booster-scheduled-command-dispatcher.ts | 4 +- .../src/services/event-store.ts | 77 +- .../src/services/read-model-store.ts | 19 +- .../booster-global-error-dispatcher.test.ts | 112 +- .../decorators/global-error-handler.test.ts | 33 +- .../test/services/event-store.test.ts | 17 +- .../test/services/read-model-store.test.ts | 1 + .../functionality/errors.integration.ts | 5 +- .../src/common/app-error-handler.ts | 69 +- .../concepts/global-error-handler-metadata.ts | 39 +- .../errors/command-handler-global-error.ts | 7 +- .../src/errors/event-handler-global-error.ts | 10 +- packages/framework-types/src/errors/index.ts | 1 - .../src/errors/projection-global-error.ts | 5 +- .../src/errors/read-model-global-error.ts | 3 - .../src/errors/reducer-global-error.ts | 5 +- .../errors/schedule-command-global-error.ts | 12 +- website/docs/03_features/05_error-handling.md | 70 +- 23 files changed, 882 insertions(+), 698 deletions(-) create mode 100644 common/changes/@boostercloud/framework-core/improve_global_error_handler_2023-04-11-09-22.json delete mode 100644 packages/framework-types/src/errors/read-model-global-error.ts diff --git a/common/changes/@boostercloud/framework-core/improve_global_error_handler_2023-04-11-09-22.json b/common/changes/@boostercloud/framework-core/improve_global_error_handler_2023-04-11-09-22.json new file mode 100644 index 000000000..0270d96c1 --- /dev/null +++ b/common/changes/@boostercloud/framework-core/improve_global_error_handler_2023-04-11-09-22.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@boostercloud/framework-core", + "comment": "Improve GlobalErrorHandler", + "type": "minor" + } + ], + "packageName": "@boostercloud/framework-core" +} \ No newline at end of file diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 25ee27dc9..cb6d01232 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -8,8 +8,8 @@ importers: ../../packages/application-tester: specifiers: '@apollo/client': 3.7.13 - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@types/jsonwebtoken': 9.0.1 '@types/node': ^18.18.2 @@ -51,7 +51,7 @@ importers: devDependencies: '@boostercloud/eslint-config': link:../../tools/eslint-config '@types/jsonwebtoken': 9.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/ws': 8.5.4 '@typescript-eslint/eslint-plugin': 5.62.0_isoa4rovreaplj6y6c4wy6pss4 '@typescript-eslint/parser': 5.62.0_trrslaohprr5r73nykufww5lry @@ -62,18 +62,18 @@ importers: eslint-plugin-import: 2.29.1_eslint@8.57.0 eslint-plugin-prettier: 3.4.0_ddm2pio5nc2sobczsauzpxvcae eslint-plugin-unicorn: 44.0.2_eslint@8.57.0 - fast-check: 3.19.0 + fast-check: 3.20.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 typescript: 5.1.6 ../../packages/cli: specifiers: - '@boostercloud/application-tester': workspace:^2.14.0 - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-core': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/application-tester': workspace:^2.15.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-core': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@oclif/core': 3.15.0 '@oclif/plugin-help': ^5 @@ -129,11 +129,11 @@ importers: '@boostercloud/framework-types': link:../framework-types '@effect-ts/core': 0.60.5 '@oclif/core': 3.15.0_typescript@5.1.6 - '@oclif/plugin-help': 5.2.20_qtieencaeb6d72le3lfodyl2z4 + '@oclif/plugin-help': 5.2.20_prqahbuxbjzfz737e746ioxvhu chalk: 2.4.2 child-process-promise: 2.2.1 execa: 2.1.0 - fp-ts: 2.16.7 + fp-ts: 2.16.9 fs-extra: 8.1.0 inflected: 2.1.0 inquirer: 7.3.3 @@ -154,7 +154,7 @@ importers: '@types/inquirer': 6.5.0 '@types/mocha': 10.0.1 '@types/mustache': 4.1.0 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/rewire': 2.5.30 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 @@ -174,17 +174,17 @@ importers: nyc: 15.1.0 prettier: 2.3.0 rewire: 5.0.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu ts-patch: 3.1.2 typescript: 5.1.6 ../../packages/framework-common-helpers: specifiers: - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@types/chai': 4.2.18 '@types/chai-as-promised': 7.1.4 @@ -231,7 +231,7 @@ importers: '@types/child-process-promise': 2.2.6 '@types/faker': 5.1.5 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/rewire': 2.5.30 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 @@ -250,18 +250,18 @@ importers: nyc: 15.1.0 prettier: 2.3.0 rewire: 5.0.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu typescript: 5.1.6 ../../packages/framework-core: specifiers: - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 - '@boostercloud/metadata-booster': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 + '@boostercloud/metadata-booster': workspace:^2.15.0 '@effect/cli': 0.35.26 '@effect/platform': 0.48.24 '@effect/platform-node': 0.45.26 @@ -323,11 +323,11 @@ importers: '@effect/platform-node': 0.45.26_cahjalgelcnk6vcj6x2oc46m3a '@effect/printer': 0.32.2_67ibgamlfqfgywvgecp7hwrxja '@effect/printer-ansi': 0.32.26_67ibgamlfqfgywvgecp7hwrxja - '@effect/schema': 0.64.18_5wzfkogs2kowufbtxgyqyusxye + '@effect/schema': 0.64.18_snixcscoukgak74x66m47k3t4i '@effect/typeclass': 0.23.17_effect@2.4.17 effect: 2.4.17 - fast-check: 3.19.0 - fp-ts: 2.16.7 + fast-check: 3.20.0 + fp-ts: 2.16.9 graphql-scalars: 1.23.0_graphql@16.9.0 graphql-subscriptions: 2.0.0_graphql@16.9.0 inflected: 2.1.0 @@ -347,7 +347,7 @@ importers: '@types/inflected': 1.1.29 '@types/jsonwebtoken': 9.0.1 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 '@types/validator': 13.1.3 @@ -368,29 +368,29 @@ importers: nock: 11.8.2 nyc: 15.1.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu ts-patch: 3.1.2 typescript: 5.1.6 ../../packages/framework-integration-tests: specifiers: '@apollo/client': 3.7.13 - '@boostercloud/application-tester': workspace:^2.14.0 - '@boostercloud/cli': workspace:^2.14.0 - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-core': workspace:^2.14.0 - '@boostercloud/framework-provider-aws': workspace:^2.14.0 - '@boostercloud/framework-provider-aws-infrastructure': workspace:^2.14.0 - '@boostercloud/framework-provider-azure': workspace:^2.14.0 - '@boostercloud/framework-provider-azure-infrastructure': workspace:^2.14.0 - '@boostercloud/framework-provider-local': workspace:^2.14.0 - '@boostercloud/framework-provider-local-infrastructure': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 - '@boostercloud/metadata-booster': workspace:^2.14.0 + '@boostercloud/application-tester': workspace:^2.15.0 + '@boostercloud/cli': workspace:^2.15.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-core': workspace:^2.15.0 + '@boostercloud/framework-provider-aws': workspace:^2.15.0 + '@boostercloud/framework-provider-aws-infrastructure': workspace:^2.15.0 + '@boostercloud/framework-provider-azure': workspace:^2.15.0 + '@boostercloud/framework-provider-azure-infrastructure': workspace:^2.15.0 + '@boostercloud/framework-provider-local': workspace:^2.15.0 + '@boostercloud/framework-provider-local-infrastructure': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 + '@boostercloud/metadata-booster': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@effect/cli': 0.35.26 '@effect/platform': 0.48.24 @@ -467,13 +467,13 @@ importers: '@effect/platform-node': 0.45.26_cahjalgelcnk6vcj6x2oc46m3a '@effect/printer': 0.32.2_67ibgamlfqfgywvgecp7hwrxja '@effect/printer-ansi': 0.32.26_67ibgamlfqfgywvgecp7hwrxja - '@effect/schema': 0.64.18_5wzfkogs2kowufbtxgyqyusxye + '@effect/schema': 0.64.18_snixcscoukgak74x66m47k3t4i '@effect/typeclass': 0.23.17_effect@2.4.17 aws-sdk: 2.853.0 effect: 2.4.17 express: 4.19.2 express-unless: 2.1.3 - fast-check: 3.19.0 + fast-check: 3.20.0 graphql: 16.9.0 tslib: 2.6.3 ws: 8.17.1 @@ -496,7 +496,7 @@ importers: '@types/jsonwebtoken': 9.0.1 '@types/mocha': 10.0.1 '@types/nedb': 1.8.16 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 '@typescript-eslint/eslint-plugin': 5.62.0_isoa4rovreaplj6y6c4wy6pss4 @@ -525,20 +525,20 @@ importers: prettier: 2.3.0 react: 17.0.2 reflect-metadata: 0.1.13 - rimraf: 5.0.7 + rimraf: 5.0.10 serverless: 3.8.0 serverless-artillery: 0.5.2 sinon: 9.2.3 subscriptions-transport-ws: 0.11.0_graphql@16.9.0 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu ts-patch: 3.1.2 typescript: 5.1.6 ../../packages/framework-provider-aws: specifiers: - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@types/aws-lambda': 8.10.48 '@types/chai': 4.2.18 @@ -586,7 +586,7 @@ importers: '@types/chai-as-promised': 7.1.4 '@types/faker': 5.1.5 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/rewire': 2.5.30 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 @@ -606,10 +606,10 @@ importers: nyc: 15.1.0 prettier: 2.3.0 rewire: 5.0.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu typescript: 5.1.6 velocityjs: 2.0.6 @@ -632,10 +632,10 @@ importers: '@aws-cdk/core': ^1.170.0 '@aws-cdk/custom-resources': ^1.170.0 '@aws-cdk/cx-api': ^1.170.0 - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-provider-aws': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-provider-aws': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@types/archiver': 5.1.0 '@types/aws-lambda': 8.10.48 @@ -717,7 +717,7 @@ importers: '@types/chai-as-promised': 7.1.4 '@types/faker': 5.1.5 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/rewire': 2.5.30 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 @@ -735,10 +735,10 @@ importers: nyc: 15.1.0 prettier: 2.3.0 rewire: 5.0.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu typescript: 5.1.6 velocityjs: 2.0.6 @@ -749,9 +749,9 @@ importers: '@azure/functions': ^1.2.2 '@azure/identity': ~2.1.0 '@azure/web-pubsub': ~1.1.0 - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@types/chai': 4.2.18 '@types/chai-as-promised': 7.1.4 @@ -795,7 +795,7 @@ importers: '@types/chai-as-promised': 7.1.4 '@types/faker': 5.1.5 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 '@typescript-eslint/eslint-plugin': 5.62.0_isoa4rovreaplj6y6c4wy6pss4 @@ -811,10 +811,10 @@ importers: mocha: 10.2.0 nyc: 15.1.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu typescript: 5.1.6 ../../packages/framework-provider-azure-infrastructure: @@ -823,11 +823,11 @@ importers: '@azure/arm-resources': ^5.0.1 '@azure/cosmos': ^4.0.0 '@azure/identity': ~2.1.0 - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-core': workspace:^2.14.0 - '@boostercloud/framework-provider-azure': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-core': workspace:^2.15.0 + '@boostercloud/framework-provider-azure': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@cdktf/provider-azurerm': 11.2.0 '@cdktf/provider-time': 9.0.2 '@effect-ts/core': ^0.60.4 @@ -912,7 +912,7 @@ importers: '@types/fs-extra': 9.0.13 '@types/mocha': 10.0.1 '@types/mustache': 4.1.0 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 '@types/uuid': 8.3.0 @@ -927,16 +927,16 @@ importers: mocha: 10.2.0 nyc: 15.1.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu typescript: 5.1.6 ../../packages/framework-provider-local: specifiers: - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@seald-io/nedb': 4.0.2 '@types/chai': 4.2.18 @@ -985,7 +985,7 @@ importers: '@types/express': 4.17.21 '@types/faker': 5.1.5 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 '@types/sinon-express-mock': 1.3.12 @@ -1004,19 +1004,19 @@ importers: mocha: 10.2.0 nyc: 15.1.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 sinon-express-mock: 2.2.1_sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu typescript: 5.1.6 ../../packages/framework-provider-local-infrastructure: specifiers: - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/framework-common-helpers': workspace:^2.14.0 - '@boostercloud/framework-provider-local': workspace:^2.14.0 - '@boostercloud/framework-types': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/framework-common-helpers': workspace:^2.15.0 + '@boostercloud/framework-provider-local': workspace:^2.15.0 + '@boostercloud/framework-types': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@types/chai': 4.2.18 '@types/chai-as-promised': 7.1.4 @@ -1069,7 +1069,7 @@ importers: '@types/express': 4.17.21 '@types/faker': 5.1.5 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/node-schedule': 1.3.2 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 @@ -1087,17 +1087,17 @@ importers: mocha: 10.2.0 nyc: 15.1.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 sinon-express-mock: 2.2.1_sinon@9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu typescript: 5.1.6 ../../packages/framework-types: specifiers: - '@boostercloud/eslint-config': workspace:^2.14.0 - '@boostercloud/metadata-booster': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 + '@boostercloud/metadata-booster': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@effect-ts/node': ~0.39.0 '@effect/cli': 0.35.26 @@ -1143,7 +1143,7 @@ importers: '@effect/platform': 0.48.24_aixcdyfeuz2zct7jthaihye4ri '@effect/printer': 0.32.2_67ibgamlfqfgywvgecp7hwrxja '@effect/printer-ansi': 0.32.26_67ibgamlfqfgywvgecp7hwrxja - '@effect/schema': 0.64.18_5wzfkogs2kowufbtxgyqyusxye + '@effect/schema': 0.64.18_snixcscoukgak74x66m47k3t4i '@effect/typeclass': 0.23.17_effect@2.4.17 effect: 2.4.17 tslib: 2.6.3 @@ -1156,7 +1156,7 @@ importers: '@types/chai': 4.2.18 '@types/chai-as-promised': 7.1.4 '@types/mocha': 10.0.1 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/sinon': 10.0.0 '@types/sinon-chai': 3.2.5 '@types/uuid': 8.3.0 @@ -1169,19 +1169,19 @@ importers: eslint-plugin-import: 2.29.1_eslint@8.57.0 eslint-plugin-prettier: 3.4.0_ddm2pio5nc2sobczsauzpxvcae eslint-plugin-unicorn: 44.0.2_eslint@8.57.0 - fast-check: 3.19.0 + fast-check: 3.20.0 graphql: 16.9.0 mocha: 10.2.0 nyc: 15.1.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 sinon-chai: 3.5.0_chai@4.2.0+sinon@9.2.3 typescript: 5.1.6 ../../packages/metadata-booster: specifiers: - '@boostercloud/eslint-config': workspace:^2.14.0 + '@boostercloud/eslint-config': workspace:^2.15.0 '@effect-ts/core': ^0.60.4 '@types/node': ^18.18.2 '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -1207,7 +1207,7 @@ importers: tslib: 2.6.3 devDependencies: '@boostercloud/eslint-config': link:../../tools/eslint-config - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@typescript-eslint/eslint-plugin': 5.62.0_isoa4rovreaplj6y6c4wy6pss4 '@typescript-eslint/parser': 5.62.0_trrslaohprr5r73nykufww5lry eslint: 8.57.0 @@ -1216,9 +1216,9 @@ importers: eslint-plugin-prettier: 3.4.0_ddm2pio5nc2sobczsauzpxvcae eslint-plugin-unicorn: 44.0.2_eslint@8.57.0 prettier: 2.3.0 - rimraf: 5.0.7 + rimraf: 5.0.10 sinon: 9.2.3 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu ts-patch: 3.1.2 typescript: 5.1.6 @@ -1668,11 +1668,10 @@ packages: '@aws-cdk/aws-logs': 1.204.0_l4ztnfmrjykhsbk6ow7yhidayu '@aws-cdk/aws-s3': 1.204.0_bi2u42js5xhxqcsg5gqefde4xi '@aws-cdk/aws-s3-assets': 1.204.0_l4ztnfmrjykhsbk6ow7yhidayu - '@aws-cdk/aws-secretsmanager': 1.204.0_336juigttbrwz7tyvm6a6wfpy4 + '@aws-cdk/aws-secretsmanager': 1.204.0_2o53qceqenzlpxe4mjswmsqfiq '@aws-cdk/core': 1.204.0_hol6usdabdbzhugfw355k4ebam '@aws-cdk/region-info': 1.204.0 constructs: 3.4.344 - yaml: 1.10.2 transitivePeerDependencies: - '@aws-cdk/aws-lambda' - '@aws-cdk/cx-api' @@ -1788,7 +1787,6 @@ packages: '@aws-cdk/core': 1.204.0_hol6usdabdbzhugfw355k4ebam '@aws-cdk/custom-resources': 1.204.0_c23kgzmvfhgnr6qpzzlbsfzuc4 constructs: 3.4.344 - punycode: 2.3.1 transitivePeerDependencies: - '@aws-cdk/aws-ec2' - '@aws-cdk/aws-logs' @@ -1943,7 +1941,7 @@ packages: '@aws-cdk/aws-route53-targets': 1.204.0_2eviprr3zwoouaslbumtdekrhi '@aws-cdk/aws-s3': 1.204.0_bi2u42js5xhxqcsg5gqefde4xi '@aws-cdk/aws-s3-assets': 1.204.0_l4ztnfmrjykhsbk6ow7yhidayu - '@aws-cdk/aws-secretsmanager': 1.204.0_336juigttbrwz7tyvm6a6wfpy4 + '@aws-cdk/aws-secretsmanager': 1.204.0_2o53qceqenzlpxe4mjswmsqfiq '@aws-cdk/aws-servicediscovery': 1.204.0_nu23nesxfni464wb5cy4ehgagi '@aws-cdk/aws-sns': 1.204.0_bi2u42js5xhxqcsg5gqefde4xi '@aws-cdk/aws-sqs': 1.204.0_cttdkzy7hngahjug7jmkfylr2y @@ -2244,7 +2242,7 @@ packages: '@aws-cdk/aws-lambda': 1.204.0_afnjft5qr3fswieaeg3dwwhnvm '@aws-cdk/aws-s3': 1.204.0_bi2u42js5xhxqcsg5gqefde4xi '@aws-cdk/aws-s3-notifications': 1.204.0_xguspq3b5n56mo6dsez57f32qa - '@aws-cdk/aws-secretsmanager': 1.204.0_336juigttbrwz7tyvm6a6wfpy4 + '@aws-cdk/aws-secretsmanager': 1.204.0_2o53qceqenzlpxe4mjswmsqfiq '@aws-cdk/aws-sns': 1.204.0_bi2u42js5xhxqcsg5gqefde4xi '@aws-cdk/aws-sns-subscriptions': 1.204.0_bpkznh2gsccwq6qpaogbkb4psu '@aws-cdk/aws-sqs': 1.204.0_cttdkzy7hngahjug7jmkfylr2y @@ -2438,7 +2436,6 @@ packages: '@aws-cdk/aws-s3-assets': 1.204.0_l4ztnfmrjykhsbk6ow7yhidayu '@aws-cdk/core': 1.204.0_hol6usdabdbzhugfw355k4ebam '@aws-cdk/lambda-layer-awscli': 1.204.0_e7ybiu4yrrtvf3zlvzrvcjkvyy - case: 1.6.3 constructs: 3.4.344 transitivePeerDependencies: - '@aws-cdk/assets' @@ -2514,7 +2511,7 @@ packages: constructs: 3.4.344 dev: false - /@aws-cdk/aws-secretsmanager/1.204.0_336juigttbrwz7tyvm6a6wfpy4: + /@aws-cdk/aws-secretsmanager/1.204.0_2o53qceqenzlpxe4mjswmsqfiq: resolution: {integrity: sha512-ykpjYmP6qVOFbHtkaQBu3Xk7xp2UTR0ouzk7pb+zrEHKGmRvzGq+8J0IU+qXBJgQIVwFAPf2IgOSTzj6FJPdyA==} engines: {node: '>= 14.15.0'} deprecated: |- @@ -2529,12 +2526,18 @@ packages: '@aws-cdk/cx-api': 1.204.0 constructs: ^3.3.69 dependencies: + '@aws-cdk/aws-ec2': 1.204.0_r4d2a6r7lnkv26zjzkdsvuam2a '@aws-cdk/aws-iam': 1.204.0_add7c2jq5lcc6idtuigbkwnzeu + '@aws-cdk/aws-kms': 1.204.0_cttdkzy7hngahjug7jmkfylr2y '@aws-cdk/aws-lambda': 1.204.0_afnjft5qr3fswieaeg3dwwhnvm '@aws-cdk/aws-sam': 1.204.0_add7c2jq5lcc6idtuigbkwnzeu '@aws-cdk/core': 1.204.0_hol6usdabdbzhugfw355k4ebam '@aws-cdk/cx-api': 1.203.0 constructs: 3.4.344 + transitivePeerDependencies: + - '@aws-cdk/assets' + - '@aws-cdk/aws-logs' + - '@aws-cdk/aws-s3' dev: false /@aws-cdk/aws-servicediscovery/1.204.0_nu23nesxfni464wb5cy4ehgagi: @@ -2712,9 +2715,6 @@ packages: /@aws-cdk/cloud-assembly-schema/1.203.0: resolution: {integrity: sha512-r252InZ8Oh7q7ztriaA3n6F48QOFVfNcT/KO4XOlYyt1xDWRMENDYf+D+DVr6O5klcaa3ivvvDT7DRuW3xdVOQ==} engines: {node: '>= 14.15.0'} - dependencies: - jsonschema: 1.4.1 - semver: 7.6.2 dev: false bundledDependencies: - jsonschema @@ -2728,9 +2728,6 @@ packages: This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html - dependencies: - jsonschema: 1.4.1 - semver: 7.6.2 dev: false bundledDependencies: - jsonschema @@ -2739,9 +2736,6 @@ packages: /@aws-cdk/cloud-assembly-schema/2.39.1: resolution: {integrity: sha512-lSVaaedXWeK08uoq0IXDCspz9U/H4qIERemdsMQrMUDTiUe/JBby7vtmyMvOdEscE8GMAmiOzoPmAE0Uf+yw5A==} engines: {node: '>= 14.15.0'} - dependencies: - jsonschema: 1.4.1 - semver: 7.6.2 dev: false bundledDependencies: - jsonschema @@ -2775,11 +2769,7 @@ packages: '@aws-cdk/cloud-assembly-schema': 1.204.0 '@aws-cdk/cx-api': 1.203.0 '@aws-cdk/region-info': 1.204.0 - '@balena/dockerignore': 1.0.2 constructs: 3.4.344 - fs-extra: 9.1.0 - ignore: 5.3.1 - minimatch: 3.1.2 dev: false bundledDependencies: - fs-extra @@ -2822,7 +2812,6 @@ packages: engines: {node: '>= 14.15.0'} dependencies: '@aws-cdk/cloud-assembly-schema': 1.203.0 - semver: 7.6.2 dev: false bundledDependencies: - semver @@ -2837,7 +2826,6 @@ packages: For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html dependencies: '@aws-cdk/cloud-assembly-schema': 1.204.0 - semver: 7.6.2 dev: false bundledDependencies: - semver @@ -2847,7 +2835,6 @@ packages: engines: {node: '>= 14.15.0'} dependencies: '@aws-cdk/cloud-assembly-schema': 2.39.1 - semver: 7.6.2 dev: false bundledDependencies: - semver @@ -2903,7 +2890,7 @@ packages: '@azure/core-client': 1.9.2 '@azure/core-lro': 2.7.2 '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.16.1 + '@azure/core-rest-pipeline': 1.16.3 tslib: 2.6.3 transitivePeerDependencies: - supports-color @@ -2918,7 +2905,7 @@ packages: '@azure/core-client': 1.9.2 '@azure/core-lro': 2.7.2 '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.16.1 + '@azure/core-rest-pipeline': 1.16.3 tslib: 2.6.3 transitivePeerDependencies: - supports-color @@ -2930,8 +2917,8 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 buffer: 6.0.3 events: 3.3.0 jssha: 3.3.1 @@ -2949,7 +2936,7 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.9.0 + '@azure/core-util': 1.9.2 tslib: 2.6.3 dev: false @@ -2959,10 +2946,10 @@ packages: dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.7.2 - '@azure/core-rest-pipeline': 1.16.1 + '@azure/core-rest-pipeline': 1.16.3 '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 tslib: 2.6.3 transitivePeerDependencies: - supports-color @@ -2973,8 +2960,8 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 tslib: 2.6.3 dev: false @@ -2985,15 +2972,15 @@ packages: tslib: 2.6.3 dev: false - /@azure/core-rest-pipeline/1.16.1: - resolution: {integrity: sha512-ExPSbgjwCoht6kB7B4MeZoBAxcQSIl29r/bPeazZJx50ej4JJCByimLOrZoIsurISNyJQQHf30b3JfqC3Hb88A==} + /@azure/core-rest-pipeline/1.16.3: + resolution: {integrity: sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w==} engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.7.2 '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 tslib: 2.6.3 @@ -3008,8 +2995,8 @@ packages: tslib: 2.6.3 dev: false - /@azure/core-util/1.9.0: - resolution: {integrity: sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==} + /@azure/core-util/1.9.2: + resolution: {integrity: sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ==} engines: {node: '>=18.0.0'} dependencies: '@azure/abort-controller': 2.1.2 @@ -3022,9 +3009,9 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 - '@azure/core-rest-pipeline': 1.16.1 + '@azure/core-rest-pipeline': 1.16.3 '@azure/core-tracing': 1.1.2 - debug: 4.3.5 + debug: 4.3.6 fast-json-stable-stringify: 2.1.0 jsbi: 3.2.5 node-abort-controller: 3.1.1 @@ -3045,8 +3032,8 @@ packages: '@azure/core-amqp': 3.3.0 '@azure/core-auth': 1.7.2 '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 buffer: 6.0.3 is-buffer: 2.0.5 jssha: 3.3.1 @@ -3068,10 +3055,10 @@ packages: '@azure/abort-controller': 1.1.0 '@azure/core-auth': 1.7.2 '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.16.1 + '@azure/core-rest-pipeline': 1.16.3 '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.9.0 - '@azure/logger': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 '@azure/msal-browser': 2.39.0 '@azure/msal-common': 7.6.0 '@azure/msal-node': 1.18.4 @@ -3085,8 +3072,8 @@ packages: - supports-color dev: false - /@azure/logger/1.1.2: - resolution: {integrity: sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==} + /@azure/logger/1.1.4: + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} engines: {node: '>=18.0.0'} dependencies: tslib: 2.6.3 @@ -3130,9 +3117,9 @@ packages: dependencies: '@azure/core-auth': 1.7.2 '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.16.1 + '@azure/core-rest-pipeline': 1.16.3 '@azure/core-tracing': 1.1.2 - '@azure/logger': 1.1.2 + '@azure/logger': 1.1.4 jsonwebtoken: 9.0.1 tslib: 2.6.3 transitivePeerDependencies: @@ -3146,27 +3133,27 @@ packages: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - /@babel/compat-data/7.24.7: - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + /@babel/compat-data/7.25.2: + resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.24.7: - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + /@babel/core/7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7_@babel+core@7.24.7 - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2_@babel+core@7.25.2 + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3174,70 +3161,47 @@ packages: - supports-color dev: true - /@babel/generator/7.24.7: - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + /@babel/generator/7.25.0: + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-compilation-targets/7.24.7: - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + /@babel/helper-compilation-targets/7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + '@babel/compat-data': 7.25.2 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-environment-visitor/7.24.7: - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - - /@babel/helper-function-name/7.24.7: - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: true - - /@babel/helper-hoist-variables/7.24.7: - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - /@babel/helper-module-imports/7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-module-transforms/7.24.7_@babel+core@7.24.7: - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + /@babel/helper-module-transforms/7.25.2_@babel+core@7.25.2: + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.3 transitivePeerDependencies: - supports-color dev: true @@ -3246,38 +3210,31 @@ packages: resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-split-export-declaration/7.24.7: - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - - /@babel/helper-string-parser/7.24.7: - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + /@babel/helper-string-parser/7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier/7.24.7: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option/7.24.7: - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + /@babel/helper-validator-option/7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.24.7: - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + /@babel/helpers/7.25.0: + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 dev: true /@babel/highlight/7.24.7: @@ -3289,56 +3246,51 @@ packages: js-tokens: 4.0.0 picocolors: 1.0.1 - /@babel/parser/7.24.7: - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + /@babel/parser/7.25.3: + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.25.2 - /@babel/runtime/7.24.7: - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + /@babel/runtime/7.25.0: + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: true - /@babel/template/7.24.7: - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + /@babel/template/7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 - /@babel/traverse/7.24.7: - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + /@babel/traverse/7.25.3: + resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.24.7: - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + /@babel/types/7.25.2: + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.7 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - /@balena/dockerignore/1.0.2: - resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} - dev: false - /@cdktf/cli-core/0.19.2_react@17.0.2: resolution: {integrity: sha512-kjgEUhrHx3kUPfL7KsTo6GrurVUPT77FmOUf7wWXt7ajNE5zCPvx/HKGmQruzt0n6eLZp1aKT+r/D6YRfXcIGA==} dependencies: @@ -3353,7 +3305,7 @@ packages: chalk: 4.1.2 chokidar: 3.6.0 cli-spinners: 2.7.0 - codemaker: 1.101.0 + codemaker: 1.102.0 constructs: 10.3.0 cross-fetch: 3.1.5 cross-spawn: 7.0.3 @@ -3369,9 +3321,9 @@ packages: ink-spinner: 4.0.3_ink@3.2.0+react@17.0.2 ink-testing-library: 2.1.0 ink-use-stdout-dimensions: 1.0.5_ink@3.2.0+react@17.0.2 - jsii: 5.4.25 - jsii-pacmak: 1.101.0 - jsii-srcmak: 0.1.1173 + jsii: 5.4.31 + jsii-pacmak: 1.102.0 + jsii-srcmak: 0.1.1204 lodash.isequal: 4.5.0 log4js: 6.9.1 minimatch: 5.1.6 @@ -3379,7 +3331,7 @@ packages: open: 7.4.2 parse-gitignore: 1.0.1 pkg-up: 3.1.0 - semver: 7.6.2 + semver: 7.6.3 sscaff: 1.2.274 stream-buffers: 3.0.3 strip-ansi: 6.0.1 @@ -3406,7 +3358,7 @@ packages: '@sentry/node': 7.118.0 cdktf: 0.19.2_constructs@10.3.0 ci-info: 3.9.0 - codemaker: 1.101.0 + codemaker: 1.102.0 constructs: 10.3.0 cross-spawn: 7.0.3 follow-redirects: 1.15.6 @@ -3421,19 +3373,19 @@ packages: /@cdktf/hcl2cdk/0.19.2: resolution: {integrity: sha512-v0UNRvvzuCi3SnmSAgBFAnWavT0ybR1AzkK8ndgfbB5JLDoNm0iJV0MOTURZF+I0O3V9u4RZsw4DVNPdil2EEA==} dependencies: - '@babel/generator': 7.24.7 - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 '@cdktf/commons': 0.19.2 '@cdktf/hcl2json': 0.19.2 '@cdktf/provider-generator': 0.19.2 '@cdktf/provider-schema': 0.19.2 camelcase: 6.3.0 deep-equal: 2.2.3 - glob: 10.4.2 + glob: 10.4.5 graphology: 0.25.4_graphology-types@0.24.7 graphology-types: 0.24.7 - jsii-rosetta: 5.4.24 + jsii-rosetta: 5.4.29 prettier: 2.8.8 reserved-words: 0.1.2 zod: 3.23.8 @@ -3471,10 +3423,10 @@ packages: '@cdktf/hcl2json': 0.19.2 '@cdktf/provider-schema': 0.19.2 '@types/node': 18.18.8 - codemaker: 1.101.0 + codemaker: 1.102.0 deepmerge: 4.3.1 fs-extra: 8.1.0 - jsii-srcmak: 0.1.1173 + jsii-srcmak: 0.1.1204 transitivePeerDependencies: - debug - supports-color @@ -3535,11 +3487,11 @@ packages: '@effect/platform': 0.48.24_aixcdyfeuz2zct7jthaihye4ri '@effect/printer': 0.32.2_67ibgamlfqfgywvgecp7hwrxja '@effect/printer-ansi': 0.32.26_67ibgamlfqfgywvgecp7hwrxja - '@effect/schema': 0.64.18_5wzfkogs2kowufbtxgyqyusxye + '@effect/schema': 0.64.18_snixcscoukgak74x66m47k3t4i effect: 2.4.17 ini: 4.1.3 toml: 3.0.0 - yaml: 2.4.5 + yaml: 2.5.0 dev: false /@effect/platform-node-shared/0.3.29_cahjalgelcnk6vcj6x2oc46m3a: @@ -3551,7 +3503,7 @@ packages: '@effect/platform': 0.48.24_aixcdyfeuz2zct7jthaihye4ri '@parcel/watcher': 2.4.1 effect: 2.4.17 - multipasta: 0.2.2 + multipasta: 0.2.4 dev: false /@effect/platform-node/0.45.26_cahjalgelcnk6vcj6x2oc46m3a: @@ -3564,7 +3516,7 @@ packages: '@effect/platform-node-shared': 0.3.29_cahjalgelcnk6vcj6x2oc46m3a effect: 2.4.17 mime: 3.0.0 - undici: 6.19.2 + undici: 6.19.5 ws: 8.17.1 transitivePeerDependencies: - bufferutil @@ -3577,11 +3529,11 @@ packages: '@effect/schema': ^0.64.18 effect: ^2.4.17 dependencies: - '@effect/schema': 0.64.18_5wzfkogs2kowufbtxgyqyusxye + '@effect/schema': 0.64.18_snixcscoukgak74x66m47k3t4i effect: 2.4.17 - find-my-way-ts: 0.1.4 + find-my-way-ts: 0.1.5 isomorphic-ws: 5.0.0_ws@8.17.1 - multipasta: 0.2.2 + multipasta: 0.2.4 path-browserify: 1.0.1 transitivePeerDependencies: - ws @@ -3608,14 +3560,14 @@ packages: effect: 2.4.17 dev: false - /@effect/schema/0.64.18_5wzfkogs2kowufbtxgyqyusxye: + /@effect/schema/0.64.18_snixcscoukgak74x66m47k3t4i: resolution: {integrity: sha512-utMVAjcKqmNlkJ8hzdXf3FWBOsekKbe3xhYzWLLLFCpdbTMkCFeN52l1QRXTk7rla87sNTYdMA+xcES9maOEog==} peerDependencies: effect: ^2.4.17 fast-check: ^3.13.2 dependencies: effect: 2.4.17 - fast-check: 3.19.0 + fast-check: 3.20.0 dev: false /@effect/typeclass/0.23.17_effect@2.4.17: @@ -3644,7 +3596,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.3.6 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -3672,7 +3624,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 + debug: 4.3.6 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3690,7 +3642,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 ansi-escapes: 4.3.2 chalk: 4.1.2 figures: 3.2.0 @@ -3700,16 +3652,16 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 chalk: 4.1.2 /@inquirer/core/2.3.1: resolution: {integrity: sha512-faYAYnIfdEuns3jGKykaog5oUqFiEVbCx9nXGZfUhyEEpKcHt5bpJfZTb3eOBQKo8I/v4sJkZeBHmFlSZQuBCw==} engines: {node: '>=14.18.0'} dependencies: - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 '@types/mute-stream': 0.0.1 - '@types/node': 20.14.9 + '@types/node': 20.14.14 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -3726,9 +3678,9 @@ packages: resolution: {integrity: sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw==} engines: {node: '>=14.18.0'} dependencies: - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 '@types/mute-stream': 0.0.4 - '@types/node': 20.14.9 + '@types/node': 20.14.14 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -3746,7 +3698,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 chalk: 4.1.2 external-editor: 3.1.0 @@ -3755,7 +3707,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 chalk: 4.1.2 figures: 3.2.0 @@ -3764,7 +3716,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 chalk: 4.1.2 /@inquirer/password/1.1.16: @@ -3772,7 +3724,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -3795,7 +3747,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 chalk: 4.1.2 /@inquirer/select/1.3.3: @@ -3803,13 +3755,13 @@ packages: engines: {node: '>=14.18.0'} dependencies: '@inquirer/core': 6.0.0 - '@inquirer/type': 1.4.0 + '@inquirer/type': 1.5.2 ansi-escapes: 4.3.2 chalk: 4.1.2 figures: 3.2.0 - /@inquirer/type/1.4.0: - resolution: {integrity: sha512-AjOqykVyjdJQvtfkNDGUyMYGF8xN50VUxftCQWsOyIo4DFRLr6VQhW0VItGI1JIyQGCGgIpKa7hMMwNhZb4OIw==} + /@inquirer/type/1.5.2: + resolution: {integrity: sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==} engines: {node: '>=18'} dependencies: mute-stream: 1.0.0 @@ -3846,7 +3798,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/resolve-uri/3.1.2: @@ -3857,38 +3809,38 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec/1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec/1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} /@jridgewell/trace-mapping/0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 - /@jsii/check-node/1.101.0: - resolution: {integrity: sha512-io8u1GAF9XGp2crx0C/WGiJeUnHGw5X0du4fisbrNJHmVVFwcJbBMjbfXKWq+JSzl8fo/JV3F1LqtjsnawKA2A==} + /@jsii/check-node/1.102.0: + resolution: {integrity: sha512-uyKjxCe1ou11RJz6koBr5vXtyaGjTA45hF+H88GNW96vms7jKqmYdMm067Az1OKwl38h02lQRQ2tmoEzV7u74w==} engines: {node: '>= 14.17.0'} dependencies: chalk: 4.1.2 - semver: 7.6.2 + semver: 7.6.3 - /@jsii/spec/1.101.0: - resolution: {integrity: sha512-855OnjKm4RTzRA78GGTNBG/GLe6X/vHJYD58zg7Rw8rWS7sU6iB65TM/7P7R3cufVew8umjjPjvW7ygS6ZqITQ==} + /@jsii/spec/1.102.0: + resolution: {integrity: sha512-/VcmoEyp7HR0xoFz47/fiyZjAv+0gHG4ZwTbgB+umbB88bTbLZadnqBL7T9OIKQbK4w8HNOaRnHwjNBIYIPxWQ==} engines: {node: '>= 14.17.0'} dependencies: - ajv: 8.16.0 + ajv: 8.17.1 /@kwsites/file-exists/1.1.1_supports-color@8.1.1: resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} dependencies: - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 transitivePeerDependencies: - supports-color dev: true @@ -3915,18 +3867,18 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - /@oclif/core/2.16.0_qtieencaeb6d72le3lfodyl2z4: + /@oclif/core/2.16.0_prqahbuxbjzfz737e746ioxvhu: resolution: {integrity: sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==} engines: {node: '>=14.0.0'} dependencies: - '@types/cli-progress': 3.11.5 + '@types/cli-progress': 3.11.6 ansi-escapes: 4.3.2 ansi-styles: 4.3.0 cardinal: 2.1.1 chalk: 4.1.2 clean-stack: 3.0.1 cli-progress: 3.12.0 - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 ejs: 3.1.10 get-package-type: 0.1.0 globby: 11.1.0 @@ -3942,7 +3894,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.2_qtieencaeb6d72le3lfodyl2z4 + ts-node: 10.9.2_prqahbuxbjzfz737e746ioxvhu tslib: 2.6.3 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -3965,7 +3917,7 @@ packages: clean-stack: 3.0.1 cli-progress: 3.12.0 color: 4.2.3 - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 ejs: 3.1.10 get-package-type: 0.1.0 globby: 11.1.0 @@ -3993,7 +3945,7 @@ packages: resolution: {integrity: sha512-Fg93aNFvXzBq5L7ztVHFP2nYwWU1oTCq48G0TjF/qC1UN36KWa2H5Hsm72kERd5x/sjy2M2Tn4kDEorUlpXOlw==} engines: {node: '>=18.0.0'} dependencies: - '@types/cli-progress': 3.11.5 + '@types/cli-progress': 3.11.6 ansi-escapes: 4.3.2 ansi-styles: 4.3.0 cardinal: 2.1.1 @@ -4001,7 +3953,7 @@ packages: clean-stack: 3.0.1 cli-progress: 3.12.0 color: 4.2.3 - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 ejs: 3.1.10 get-package-type: 0.1.0 globby: 11.1.0 @@ -4023,11 +3975,11 @@ packages: wrap-ansi: 7.0.0 dev: true - /@oclif/plugin-help/5.2.20_qtieencaeb6d72le3lfodyl2z4: + /@oclif/plugin-help/5.2.20_prqahbuxbjzfz737e746ioxvhu: resolution: {integrity: sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.16.0_qtieencaeb6d72le3lfodyl2z4 + '@oclif/core': 2.16.0_prqahbuxbjzfz737e746ioxvhu transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -4040,7 +3992,7 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@oclif/core': 3.27.0 - chai: 4.4.1 + chai: 4.5.0 fancy-test: 3.0.16 transitivePeerDependencies: - supports-color @@ -4161,7 +4113,7 @@ packages: detect-libc: 1.0.3 is-glob: 4.0.3 micromatch: 4.0.7 - node-addon-api: 7.1.0 + node-addon-api: 7.1.1 optionalDependencies: '@parcel/watcher-android-arm64': 2.4.1 '@parcel/watcher-darwin-arm64': 2.4.1 @@ -4256,7 +4208,7 @@ packages: node-dir: 0.1.17 node-fetch: 2.7.0 open: 7.4.2 - semver: 7.6.2 + semver: 7.6.3 simple-git: 3.25.0_supports-color@8.1.1 type: 2.7.3 uuid: 8.3.2 @@ -4272,7 +4224,7 @@ packages: /@serverless/event-mocks/1.1.1: resolution: {integrity: sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==} dependencies: - '@types/lodash': 4.17.6 + '@types/lodash': 4.17.7 lodash: 4.17.21 dev: true @@ -4282,7 +4234,7 @@ packages: dependencies: adm-zip: 0.5.14 archiver: 5.3.0 - axios: 1.7.2 + axios: 1.7.3 fast-glob: 3.3.2 https-proxy-agent: 5.0.1_supports-color@8.1.1 ignore: 5.3.1 @@ -4392,14 +4344,14 @@ packages: dependencies: '@sinonjs/commons': 1.8.6 lodash.get: 4.4.2 - type-detect: 4.0.8 + type-detect: 4.1.0 /@sinonjs/samsam/8.0.0: resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==} dependencies: '@sinonjs/commons': 2.0.0 lodash.get: 4.4.2 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /@sinonjs/text-encoding/0.7.2: @@ -4457,14 +4409,14 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/cacheable-request/6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/responselike': 1.0.3 dev: true @@ -4487,29 +4439,29 @@ packages: /@types/child-process-promise/2.2.6: resolution: {integrity: sha512-g0pOHijr6Trug43D2bV0PLSIsSHa/xHEES2HeX5BAlduq1vW0nZcq27Zeud5lgmNB+kPYYVqiMap32EHGTco/w==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true - /@types/cli-progress/3.11.5: - resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} + /@types/cli-progress/3.11.6: + resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/connect/3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/cors/2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true /@types/express-serve-static-core/4.19.5: resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -4529,14 +4481,14 @@ packages: /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true /@types/glob/8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/http-cache-semantics/4.0.4: resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} @@ -4565,16 +4517,16 @@ packages: /@types/jsonwebtoken/9.0.1: resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true - /@types/lodash/4.17.6: - resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} + /@types/lodash/4.17.7: + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} dev: true /@types/mime/1.3.5: @@ -4594,29 +4546,29 @@ packages: /@types/mute-stream/0.0.1: resolution: {integrity: sha512-0yQLzYhCqGz7CQPE3iDmYjhb7KMBFOP+tBkyw+/Y2YyDI5wpS7itXXxneN1zSsUwWx3Ji6YiVYrhAnpQGS/vkw==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/mute-stream/0.0.4: resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/nedb/1.8.16: resolution: {integrity: sha512-ND+uzwAZk7ZI9byOvHGOcZe2R9XUcLF698yDJKn00trFvh+GaemkX3gQKCSKtObjDpv8Uuou+k8v4x4scPr4TA==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true /@types/needle/2.5.3: resolution: {integrity: sha512-RwgTwMRaedfyCBe5SSWMpm1Yqzc5UPZEMw0eAd09OSyV93nLRj9/evMGZmgFeHKzUOd4xxtHvgtc+rjcBjI1Qg==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: false /@types/node-schedule/1.3.2: resolution: {integrity: sha512-Y0CqdAr+lCpArT8CJJjJq4U2v8Bb5e7ru2nV/NhDdaptCMCRdOL3Y7tAhen39HluQMaIKWvPbDuiFBUQpg7Srw==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true /@types/node/10.17.60: @@ -4628,13 +4580,13 @@ packages: dependencies: undici-types: 5.26.5 - /@types/node/18.19.39: - resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} + /@types/node/18.19.43: + resolution: {integrity: sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==} dependencies: undici-types: 5.26.5 - /@types/node/20.14.9: - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + /@types/node/20.14.14: + resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} dependencies: undici-types: 5.26.5 @@ -4651,7 +4603,7 @@ packages: /@types/responselike/1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true /@types/rewire/2.5.30: @@ -4665,13 +4617,13 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 18.19.39 + '@types/node': 18.19.43 /@types/serve-static/1.15.7: resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/node': 18.19.39 + '@types/node': 18.19.43 '@types/send': 0.17.4 /@types/sinon-chai/3.2.5: @@ -4696,7 +4648,7 @@ packages: /@types/through/0.0.33: resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true /@types/uuid/8.3.0: @@ -4713,14 +4665,14 @@ packages: /@types/ws/8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 dev: true /@types/yauzl/2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 18.19.39 + '@types/node': 18.19.43 optional: true /@types/yoga-layout/1.9.2: @@ -4742,12 +4694,12 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0_trrslaohprr5r73nykufww5lry '@typescript-eslint/utils': 5.62.0_trrslaohprr5r73nykufww5lry - debug: 4.3.5 + debug: 4.3.6 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 - semver: 7.6.2 + semver: 7.6.3 tsutils: 3.21.0_typescript@5.1.6 typescript: 5.1.6 transitivePeerDependencies: @@ -4766,7 +4718,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.1.6 - debug: 4.3.5 + debug: 4.3.6 eslint: 8.57.0 typescript: 5.1.6 transitivePeerDependencies: @@ -4791,7 +4743,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.1.6 '@typescript-eslint/utils': 5.62.0_trrslaohprr5r73nykufww5lry - debug: 4.3.5 + debug: 4.3.6 eslint: 8.57.0 tsutils: 3.21.0_typescript@5.1.6 typescript: 5.1.6 @@ -4813,10 +4765,10 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.2 + semver: 7.6.3 tsutils: 3.21.0_typescript@5.1.6 typescript: 5.1.6 transitivePeerDependencies: @@ -4836,7 +4788,7 @@ packages: '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.1.6 eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -4925,7 +4877,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -4933,7 +4885,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 transitivePeerDependencies: - supports-color dev: true @@ -4942,7 +4894,7 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -4961,7 +4913,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.16.0 + ajv: 8.17.1 dev: true /ajv/6.12.6: @@ -4972,13 +4924,13 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv/8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + /ajv/8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 /ansi-colors/4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} @@ -5232,8 +5184,8 @@ packages: fsevents: 2.3.2 dev: false - /aws-sdk/2.1654.0: - resolution: {integrity: sha512-b5ryvXipBJod9Uh1GUfQNgi5tIIiluxJbyqr/hZ/mr5U8WxrrfjVq3nGnx5JjevFKYRqXIywhumsVyanfACzFA==} + /aws-sdk/2.1667.0: + resolution: {integrity: sha512-hE4FmdZRMc3bYeC5LUAAU/ryYpjhEm1xdi4aVtUiZ14rrfMd0li6XQIM00a9ctZwDJpwJppcSXfDj6bVBCzvXQ==} engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: @@ -5262,8 +5214,8 @@ packages: uuid: 3.3.2 xml2js: 0.4.19 - /axios/1.7.2: - resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + /axios/1.7.3: + resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 @@ -5346,15 +5298,15 @@ packages: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist/4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + /browserslist/4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001640 - electron-to-chromium: 1.4.816 - node-releases: 2.0.14 - update-browserslist-db: 1.1.0_browserslist@4.23.1 + caniuse-lite: 1.0.30001649 + electron-to-chromium: 1.5.4 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0_browserslist@4.23.3 dev: true /buffer-alloc-unsafe/1.1.0: @@ -5467,8 +5419,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite/1.0.30001640: - resolution: {integrity: sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==} + /caniuse-lite/1.0.30001649: + resolution: {integrity: sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==} dev: true /cardinal/2.1.1: @@ -5490,7 +5442,7 @@ packages: '@aws-cdk/cloud-assembly-schema': 2.39.1 '@aws-cdk/cx-api': 2.39.1 archiver: 5.3.2 - aws-sdk: 2.1654.0 + aws-sdk: 2.1667.0 glob: 7.2.3 mime: 2.6.0 yargs: 16.2.0 @@ -5508,14 +5460,14 @@ packages: '@sentry/node': 7.118.0 cdktf: 0.19.2_constructs@10.3.0 ci-info: 3.9.0 - codemaker: 1.101.0 + codemaker: 1.102.0 constructs: 10.3.0 cross-spawn: 7.0.3 https-proxy-agent: 5.0.1 ink-select-input: 4.2.2_ink@3.2.0+react@17.0.2 ink-table: 3.1.0_ink@3.2.0+react@17.0.2 - jsii: 5.4.25 - jsii-pacmak: 1.101.0 + jsii: 5.4.31 + jsii-pacmak: 1.102.0 minimatch: 5.1.6 node-fetch: 2.7.0 pidtree: 0.6.0 @@ -5541,10 +5493,7 @@ packages: peerDependencies: constructs: ^10.0.25 dependencies: - archiver: 5.3.2 constructs: 10.3.0 - json-stable-stringify: 1.1.1 - semver: 7.6.2 bundledDependencies: - archiver - json-stable-stringify @@ -5572,10 +5521,10 @@ packages: deep-eql: 3.0.1 get-func-name: 2.0.2 pathval: 1.1.1 - type-detect: 4.0.8 + type-detect: 4.1.0 - /chai/4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + /chai/4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 @@ -5584,7 +5533,7 @@ packages: get-func-name: 2.0.2 loupe: 2.3.7 pathval: 1.1.1 - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /chalk/2.4.2: @@ -5843,8 +5792,8 @@ packages: dependencies: convert-to-spaces: 1.0.2 - /codemaker/1.101.0: - resolution: {integrity: sha512-bAg+N4PA8mniJrCpTYFdaFmJA+3fE1Vjgf4o1EnPc07nw6qRcJsr/D9ZZoutEsvw7UM8OmZp4qZxVzpCqRhhQQ==} + /codemaker/1.102.0: + resolution: {integrity: sha512-lxsbbcSMxCdT+9wUv1AvBH9791andoWDcQ6s7ZK6KsMZ+UkRLO3obzhi7Zm+RIA3lHecqzaGmOKyRnu0Dx/Zew==} engines: {node: '>= 14.17.0'} dependencies: camelcase: 6.3.0 @@ -5906,14 +5855,13 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /commonmark/0.31.0: - resolution: {integrity: sha512-nuDsQ34gjmgAqjyIz6mbRWBW/XPE9wsBempAMBk2V/AA88ekztjTM46oi07J6c6Y/2Y8TdYCZi9L0pIBt/oMZw==} + /commonmark/0.31.1: + resolution: {integrity: sha512-M6pbc3sRU96iiOK7rmjv/TNrXvTaOscvthUCq7YOrlvZWbqAA36fyEtBvyI3nCcEK4u+JAy9sAdtftIeXwIWig==} hasBin: true dependencies: entities: 3.0.1 mdurl: 1.0.1 minimist: 1.2.8 - string.prototype.repeat: 1.0.0 /component-emitter/1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -6031,7 +5979,7 @@ packages: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} dependencies: - luxon: 3.4.4 + luxon: 3.5.0 dev: false /cross-env/7.0.3: @@ -6114,15 +6062,15 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 dev: true /date-format/4.0.14: resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} engines: {node: '>=4.0'} - /dayjs/1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + /dayjs/1.11.12: + resolution: {integrity: sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==} dev: true /debug/2.6.9: @@ -6148,8 +6096,8 @@ packages: supports-color: 8.1.1 dev: true - /debug/4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + /debug/4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -6159,8 +6107,8 @@ packages: dependencies: ms: 2.1.2 - /debug/4.3.5_supports-color@8.1.1: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + /debug/4.3.6_supports-color@8.1.1: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -6248,13 +6196,13 @@ packages: resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} engines: {node: '>=0.12'} dependencies: - type-detect: 4.0.8 + type-detect: 4.1.0 /deep-eql/4.1.4: resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} engines: {node: '>=6'} dependencies: - type-detect: 4.0.8 + type-detect: 4.1.0 dev: true /deep-equal/2.2.3: @@ -6375,7 +6323,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -6435,9 +6383,9 @@ packages: resolution: {integrity: sha512-vo835pntK7kzYStk7xUHDifiYJvXxVhUapt85uk2AI94gUUAQX9HNRtrcMHNSc3YHJUEHGbYIGsM99uIbgAtxw==} hasBin: true dependencies: - semver: 7.6.2 + semver: 7.6.3 shelljs: 0.8.5 - typescript: 5.6.0-dev.20240730 + typescript: 5.6.0-dev.20240805 /duration/0.2.2: resolution: {integrity: sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==} @@ -6466,10 +6414,10 @@ packages: engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.9.1 + jake: 10.9.2 - /electron-to-chromium/1.4.816: - resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==} + /electron-to-chromium/1.5.4: + resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} dev: true /emoji-regex/7.0.3: @@ -6685,7 +6633,7 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.14.0 + is-core-module: 2.15.0 resolve: 1.22.8 /eslint-module-utils/2.8.1_eslint@8.57.0: @@ -6716,7 +6664,7 @@ packages: eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.1_eslint@8.57.0 hasown: 2.0.2 - is-core-module: 2.14.0 + is-core-module: 2.15.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -6752,7 +6700,7 @@ packages: clean-regexp: 1.0.0 eslint: 8.57.0 eslint-utils: 3.0.0_eslint@8.57.0 - esquery: 1.5.0 + esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 lodash: 4.17.21 @@ -6760,7 +6708,7 @@ packages: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 safe-regex: 2.1.1 - semver: 7.6.2 + semver: 7.6.3 strip-indent: 3.0.0 dev: true @@ -6818,13 +6766,13 @@ packages: ajv: 6.12.6 chalk: 2.4.2 cross-spawn: 6.0.5 - debug: 4.3.5 + debug: 4.3.6 doctrine: 3.0.0 eslint-scope: 5.1.1 eslint-utils: 1.4.3 eslint-visitor-keys: 1.3.0 espree: 6.2.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 file-entry-cache: 5.0.1 functional-red-black-tree: 1.0.1 @@ -6871,13 +6819,13 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.6 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -6941,8 +6889,8 @@ packages: engines: {node: '>=4'} hasBin: true - /esquery/1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + /esquery/1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -7070,7 +7018,7 @@ packages: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} engines: {node: '>=0.10.0'} dependencies: - mime-db: 1.52.0 + mime-db: 1.53.0 dev: true /ext-name/5.0.0: @@ -7100,7 +7048,7 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.5 + debug: 4.3.6 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -7118,8 +7066,8 @@ packages: deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dependencies: '@types/chai': 4.2.18 - '@types/lodash': 4.17.6 - '@types/node': 18.19.39 + '@types/lodash': 4.17.7 + '@types/node': 18.19.43 '@types/sinon': 10.0.0 lodash: 4.17.21 mock-stdin: 1.0.0 @@ -7130,16 +7078,12 @@ packages: - supports-color dev: true - /fast-check/3.19.0: - resolution: {integrity: sha512-CO2JX/8/PT9bDGO1iXa5h5ey1skaKI1dvecERyhH4pp3PGjwd3KIjMAXEg79Ps9nclsdt4oPbfqiAnLU0EwrAQ==} + /fast-check/3.20.0: + resolution: {integrity: sha512-pZIjqLpOZgdSLecec4GKC3Zq5702MZ34upMKxojnNVSWA0K64V3pXOBT1Wdsrc3AphLtzRBbsi8bRWF4TUGmUg==} engines: {node: '>=8.0.0'} dependencies: pure-rand: 6.1.0 - /fast-decode-uri-component/1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - dev: false - /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -7162,16 +7106,13 @@ packages: /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fast-querystring/1.1.2: - resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} - dependencies: - fast-decode-uri-component: 1.0.1 - dev: false - /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true + /fast-uri/3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + /fastest-levenshtein/1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -7286,10 +7227,8 @@ packages: pkg-dir: 4.2.0 dev: true - /find-my-way-ts/0.1.4: - resolution: {integrity: sha512-naNl2YZ8m9LlYtPZathQBjXQQ8069uYBFq8We6w9AEGddJErVh0JZw8jd/C/2W9Ib3BjTnu+YN0/rR+ytWxNdw==} - dependencies: - fast-querystring: 1.1.2 + /find-my-way-ts/0.1.5: + resolution: {integrity: sha512-4GOTMrpGQVzsCH2ruUn2vmwzV/02zF4q+ybhCIrw/Rkt3L8KWcycdC6aJMctJzwN4fXD4SD5F/4B9Sksh5rE0A==} dev: false /find-requires/1.0.0: @@ -7394,15 +7333,15 @@ packages: dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - qs: 6.12.2 + qs: 6.13.0 dev: true /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - /fp-ts/2.16.7: - resolution: {integrity: sha512-Xiux+4mHHPj32/mrqN3XIIqEKk/MousgoC2FIaCwehpPjBI4oDrLvQEyQ/2T1sbTe0s/YIQqF98z+uHJLVoS9Q==} + /fp-ts/2.16.9: + resolution: {integrity: sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==} dev: false /fresh/0.5.2: @@ -7583,13 +7522,12 @@ packages: dependencies: is-glob: 4.0.3 - /glob/10.4.2: - resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} - engines: {node: '>=16 || 14 >=14.18'} + /glob/10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: foreground-child: 3.2.1 - jackspeak: 3.4.0 + jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 @@ -7597,6 +7535,7 @@ packages: /glob/7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -7826,7 +7765,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -7844,7 +7783,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -7853,7 +7792,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2_supports-color@8.1.1 - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 transitivePeerDependencies: - supports-color dev: true @@ -7863,7 +7802,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -8147,8 +8086,8 @@ packages: dependencies: ci-info: 2.0.0 - /is-core-module/2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + /is-core-module/2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 @@ -8369,7 +8308,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -8402,7 +8341,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.5 + debug: 4.3.6 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -8420,16 +8359,15 @@ packages: /iterall/1.3.0: resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} - /jackspeak/3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + /jackspeak/3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /jake/10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + /jake/10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -8474,72 +8412,72 @@ packages: engines: {node: '>=4'} hasBin: true - /jsii-pacmak/1.101.0: - resolution: {integrity: sha512-07a04KtOj+Kmx+5XQVD1JG6QOh6JNqFWh4bbzMDKiFx7JoHhQnLq07b/OlUpCuP7J7Q9WaXXYM59EUQpXO07wg==} + /jsii-pacmak/1.102.0: + resolution: {integrity: sha512-3/nqBYNH8n/5IWI0sBFBYl1yATokEDUDQtYFLjzk7oXNWpUJ23/encI78Cs55ZS6UXcfWN3xczGLqCWnsgEpnw==} engines: {node: '>= 14.17.0'} hasBin: true peerDependencies: - jsii-rosetta: ^1.101.0 || ~5.2.0 || ~5.3.0 || ~5.4.0 + jsii-rosetta: ^1.102.0 || ~5.2.0 || ~5.3.0 || ~5.4.0 dependencies: - '@jsii/check-node': 1.101.0 - '@jsii/spec': 1.101.0 + '@jsii/check-node': 1.102.0 + '@jsii/spec': 1.102.0 clone: 2.1.2 - codemaker: 1.101.0 - commonmark: 0.31.0 + codemaker: 1.102.0 + commonmark: 0.31.1 escape-string-regexp: 4.0.0 fs-extra: 10.1.0 - jsii-reflect: 1.101.0 - semver: 7.6.2 + jsii-reflect: 1.102.0 + semver: 7.6.3 spdx-license-list: 6.9.0 xmlbuilder: 15.1.1 yargs: 16.2.0 - /jsii-pacmak/1.101.0_jsii-rosetta@5.4.24: - resolution: {integrity: sha512-07a04KtOj+Kmx+5XQVD1JG6QOh6JNqFWh4bbzMDKiFx7JoHhQnLq07b/OlUpCuP7J7Q9WaXXYM59EUQpXO07wg==} + /jsii-pacmak/1.102.0_jsii-rosetta@5.4.29: + resolution: {integrity: sha512-3/nqBYNH8n/5IWI0sBFBYl1yATokEDUDQtYFLjzk7oXNWpUJ23/encI78Cs55ZS6UXcfWN3xczGLqCWnsgEpnw==} engines: {node: '>= 14.17.0'} hasBin: true peerDependencies: - jsii-rosetta: ^1.101.0 || ~5.2.0 || ~5.3.0 || ~5.4.0 + jsii-rosetta: ^1.102.0 || ~5.2.0 || ~5.3.0 || ~5.4.0 dependencies: - '@jsii/check-node': 1.101.0 - '@jsii/spec': 1.101.0 + '@jsii/check-node': 1.102.0 + '@jsii/spec': 1.102.0 clone: 2.1.2 - codemaker: 1.101.0 - commonmark: 0.31.0 + codemaker: 1.102.0 + commonmark: 0.31.1 escape-string-regexp: 4.0.0 fs-extra: 10.1.0 - jsii-reflect: 1.101.0 - jsii-rosetta: 5.4.24 - semver: 7.6.2 + jsii-reflect: 1.102.0 + jsii-rosetta: 5.4.29 + semver: 7.6.3 spdx-license-list: 6.9.0 xmlbuilder: 15.1.1 yargs: 16.2.0 - /jsii-reflect/1.101.0: - resolution: {integrity: sha512-ZCFb+laktj/ekNadUYksf+jLZq4fjoQeNe344GwslJOaemGjgAeqy0atV2H8nvTYU8ubszFApUPpdoRvtxgdPw==} + /jsii-reflect/1.102.0: + resolution: {integrity: sha512-Lf2l8z3HSRSyouFGpDddfheP2LznKvFDKVlUWEzO+jDnQFOJOYTv4x617Yy5JIeIa9D8f70drRelOqove6hZtQ==} engines: {node: '>= 14.17.0'} hasBin: true dependencies: - '@jsii/check-node': 1.101.0 - '@jsii/spec': 1.101.0 + '@jsii/check-node': 1.102.0 + '@jsii/spec': 1.102.0 chalk: 4.1.2 fs-extra: 10.1.0 - oo-ascii-tree: 1.101.0 + oo-ascii-tree: 1.102.0 yargs: 16.2.0 - /jsii-rosetta/5.4.24: - resolution: {integrity: sha512-KFeyqpIqbA6eDfmC9DdsG13kSANev47amXrH+ngx8WhXTre8D11V65BiSWlyBdvuUFvmGaN8eUd66+dyPcxndA==} + /jsii-rosetta/5.4.29: + resolution: {integrity: sha512-6/eQFAS+O1szcdczogAn+P6yqjJu88kqZbpGPL0Ks9LxA94EbwNxiAPwsh1g3GvY+ETDVKfND7iEE0tiVpvTsA==} engines: {node: '>= 18.12.0'} hasBin: true dependencies: - '@jsii/check-node': 1.101.0 - '@jsii/spec': 1.101.0 + '@jsii/check-node': 1.102.0 + '@jsii/spec': 1.102.0 '@xmldom/xmldom': 0.8.10 chalk: 4.1.2 - commonmark: 0.31.0 + commonmark: 0.31.1 fast-glob: 3.3.2 - jsii: 5.4.25 - semver: 7.6.2 + jsii: 5.4.31 + semver: 7.6.3 semver-intersect: 1.5.0 stream-json: 1.8.0 typescript: 5.4.5 @@ -8548,32 +8486,32 @@ packages: transitivePeerDependencies: - supports-color - /jsii-srcmak/0.1.1173: - resolution: {integrity: sha512-UvrCJwRZyaW0mQg3Ky5utH31dngKMfKJetfh4JSLsKJM7AM+gJ+UvEbqd18ikMgD72KS3VQKgrwmLVF34GEu+g==} + /jsii-srcmak/0.1.1204: + resolution: {integrity: sha512-mPVD+bEnikHP6ssZ5cRqx+DirjV9/LvnPiunMko5MQDrLeyVdGYLi6kQ4QDF4uMw08oPaXXkhL8EhlZwp4tTDg==} hasBin: true dependencies: fs-extra: 9.1.0 - jsii: 5.4.25 - jsii-pacmak: 1.101.0_jsii-rosetta@5.4.24 - jsii-rosetta: 5.4.24 + jsii: 5.4.31 + jsii-pacmak: 1.102.0_jsii-rosetta@5.4.29 + jsii-rosetta: 5.4.29 ncp: 2.0.0 yargs: 17.7.2 transitivePeerDependencies: - supports-color - /jsii/5.4.25: - resolution: {integrity: sha512-taEVKh+SWtg0nNGzk5YrLGjWRxSnVaVfxgec4BtthwBgmaUH+QMKIIT/AM84s1WRVMWBG+GnZKgKFv+L4jKLig==} + /jsii/5.4.31: + resolution: {integrity: sha512-qxiV/NMucgvHHupZJ36QACejcgZ3qY1FzjVHMOBmDHm+dISZ39p7dH7Hiq2ErMEwCDzdvQgR1OwCsUnrBH6oVQ==} engines: {node: '>= 18.12.0'} hasBin: true dependencies: - '@jsii/check-node': 1.101.0 - '@jsii/spec': 1.101.0 + '@jsii/check-node': 1.102.0 + '@jsii/spec': 1.102.0 case: 1.6.3 chalk: 4.1.2 downlevel-dts: 0.11.0 fast-deep-equal: 3.1.3 log4js: 6.9.1 - semver: 7.6.2 + semver: 7.6.3 semver-intersect: 1.5.0 sort-json: 2.0.1 spdx-license-list: 6.9.0 @@ -8620,15 +8558,6 @@ packages: /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - /json-stable-stringify/1.1.1: - resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - isarray: 2.0.5 - jsonify: 0.0.1 - object-keys: 1.1.1 - /json-stringify-safe/5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true @@ -8657,13 +8586,6 @@ packages: optionalDependencies: graceful-fs: 4.2.11 - /jsonify/0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - - /jsonschema/1.4.1: - resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} - dev: false - /jsonwebtoken/8.5.1: resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} engines: {node: '>=4', npm: '>=1.4.28'} @@ -8687,7 +8609,7 @@ packages: jws: 3.2.2 lodash: 4.17.21 ms: 2.1.3 - semver: 7.6.2 + semver: 7.6.3 /jssha/3.3.1: resolution: {integrity: sha512-VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ==} @@ -8730,7 +8652,7 @@ packages: dependencies: '@types/express': 4.17.21 '@types/jsonwebtoken': 9.0.1 - debug: 4.3.5 + debug: 4.3.6 jose: 4.15.9 limiter: 1.1.5 lru-memoizer: 2.3.0 @@ -8943,7 +8865,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.5 + debug: 4.3.6 flatted: 3.3.1 rfdc: 1.4.1 streamroller: 3.1.5 @@ -8971,9 +8893,8 @@ packages: engines: {node: '>=8'} dev: true - /lru-cache/10.3.0: - resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} - engines: {node: 14 || >=16.14} + /lru-cache/10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} /lru-cache/4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -9005,8 +8926,8 @@ packages: es5-ext: 0.10.64 dev: true - /luxon/3.4.4: - resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} + /luxon/3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} engines: {node: '>=12'} dev: false @@ -9028,7 +8949,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.6.2 + semver: 7.6.3 dev: true /make-error/1.3.6: @@ -9088,6 +9009,11 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + /mime-db/1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + dev: true + /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -9269,8 +9195,8 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /multipasta/0.2.2: - resolution: {integrity: sha512-KKGdmXIJUmt9BV45LsbUdMnju8eCNSyF9KpbyqK2E3wQXjpPQOg52/Hc+nsmBacmEkNxLVT5h1y3ZgEXB4prXg==} + /multipasta/0.2.4: + resolution: {integrity: sha512-uS6VKZou4iDU4evtrNKGvRqgqkFtPdjG/ql9XDICfnzKEedgf0OZ+oEhM0ps0FL5IVFhkIzOBgLV/KpEEJMthw==} dev: false /mustache/4.1.0: @@ -9376,7 +9302,7 @@ packages: resolution: {integrity: sha512-udrFXJ/aqPM9NmrKOcNJ67lvrs/zroNq2sbumhaMPW5JLNy/6LsWiZEwU9DiQIUHOcOCR4MPeqIG7uQNbDGExA==} engines: {node: '>= 8.0'} dependencies: - debug: 4.3.5 + debug: 4.3.6 json-stringify-safe: 5.0.1 lodash: 4.17.21 mkdirp: 0.5.6 @@ -9389,7 +9315,7 @@ packages: resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} engines: {node: '>= 10.13'} dependencies: - debug: 4.3.5 + debug: 4.3.6 json-stringify-safe: 5.0.1 propagate: 2.0.1 transitivePeerDependencies: @@ -9400,15 +9326,14 @@ packages: resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==} engines: {node: '>=10'} dependencies: - semver: 7.6.2 + semver: 7.6.3 /node-abort-controller/3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} dev: false - /node-addon-api/7.1.0: - resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} - engines: {node: ^16 || ^18 || >= 20} + /node-addon-api/7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} dev: false /node-dir/0.1.17: @@ -9452,8 +9377,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases/2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-releases/2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} dev: true /node-rsa/0.4.2: @@ -9507,7 +9432,7 @@ packages: fs2: 0.3.9 memoizee: 0.4.17 node-fetch: 2.7.0 - semver: 7.6.2 + semver: 7.6.3 type: 2.7.3 validate-npm-package-name: 3.0.0 transitivePeerDependencies: @@ -9651,8 +9576,8 @@ packages: dependencies: mimic-fn: 2.1.0 - /oo-ascii-tree/1.101.0: - resolution: {integrity: sha512-hNE9Nfvo4HLa9/dAiaiXUm64KHUvgBa7jPftsb8gZdTv1G1wSMMnd9j7SMcRzaMbDEqi+0cfgeBSIcsKy+k0vA==} + /oo-ascii-tree/1.102.0: + resolution: {integrity: sha512-SNcZNfqtov0Af+6hx+qnliUhTOIxPUfboX/zQnc2EdmGHLXKQ3eSPQ40NopCgv4canzl5EvKGlCJaMCvk2viCQ==} engines: {node: '>= 14.17.0'} /open/7.4.2: @@ -9893,7 +9818,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.3.0 + lru-cache: 10.4.3 minipass: 7.1.2 /path-to-regexp/0.1.7: @@ -10128,8 +10053,8 @@ packages: dependencies: side-channel: 1.0.6 - /qs/6.12.2: - resolution: {integrity: sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==} + /qs/6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 @@ -10359,7 +10284,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -10406,7 +10331,7 @@ packages: /rhea-promise/3.0.3: resolution: {integrity: sha512-a875P5YcMkePSTEWMsnmCQS7Y4v/XvIw7ZoMtJxqtQRZsqSA6PsZxuz4vktyRykPuUgdNsA6F84dS3iEXZoYnQ==} dependencies: - debug: 4.3.5 + debug: 4.3.6 rhea: 3.0.2 tslib: 2.6.3 transitivePeerDependencies: @@ -10416,7 +10341,7 @@ packages: /rhea/3.0.2: resolution: {integrity: sha512-0G1ZNM9yWin8VLvTxyISKH6KfR6gl1TW/1+5yMKPf2r1efhkzTLze09iFtT2vpDjuWIVtSmXz8r18lk/dO8qwQ==} dependencies: - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: false @@ -10444,12 +10369,11 @@ packages: dependencies: glob: 7.2.3 - /rimraf/5.0.7: - resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} - engines: {node: '>=14.18'} + /rimraf/5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true dependencies: - glob: 10.4.2 + glob: 10.4.5 dev: true /run-async/2.4.1: @@ -10553,8 +10477,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver/7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + /semver/7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -10619,10 +10543,10 @@ packages: '@serverless/dashboard-plugin': 6.4.0_supports-color@8.1.1 '@serverless/platform-client': 4.5.1_supports-color@8.1.1 '@serverless/utils': 6.15.0 - ajv: 8.16.0 + ajv: 8.17.1 ajv-formats: 2.1.1 archiver: 5.3.0 - aws-sdk: 2.1654.0 + aws-sdk: 2.1667.0 bluebird: 3.7.2 cachedir: 2.4.0 chalk: 4.1.2 @@ -10630,7 +10554,7 @@ packages: ci-info: 3.9.0 cli-progress-footer: 2.3.3 d: 1.0.2 - dayjs: 1.11.11 + dayjs: 1.11.12 decompress: 4.2.1 dotenv: 10.0.0 dotenv-expand: 5.1.0 @@ -10659,7 +10583,7 @@ packages: process-utils: 4.0.0 promise-queue: 2.2.5 require-from-string: 2.0.2 - semver: 7.6.2 + semver: 7.6.3 signal-exit: 3.0.7 strip-ansi: 6.0.1 supports-color: 8.1.1 @@ -10779,7 +10703,7 @@ packages: dependencies: '@kwsites/file-exists': 1.1.1_supports-color@8.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 transitivePeerDependencies: - supports-color dev: true @@ -10964,7 +10888,7 @@ packages: resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} engines: {node: '>=8.0.0'} dependencies: - debug: 4.3.5 + debug: 4.3.6 strip-ansi: 6.0.1 transitivePeerDependencies: - supports-color @@ -11006,7 +10930,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.5 + debug: 4.3.6 fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -11036,12 +10960,6 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.repeat/1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - /string.prototype.trim/1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -11169,15 +11087,15 @@ packages: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.5_supports-color@8.1.1 + debug: 4.3.6_supports-color@8.1.1 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 methods: 1.1.2 mime: 2.6.0 - qs: 6.12.2 + qs: 6.13.0 readable-stream: 3.6.2 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: true @@ -11240,7 +11158,7 @@ packages: resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.16.0 + ajv: 8.17.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -11396,7 +11314,7 @@ packages: code-block-writer: 12.0.0 dev: false - /ts-node/10.9.2_qtieencaeb6d72le3lfodyl2z4: + /ts-node/10.9.2_prqahbuxbjzfz737e746ioxvhu: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -11415,7 +11333,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.39 + '@types/node': 18.19.43 acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 @@ -11434,7 +11352,7 @@ packages: global-prefix: 3.0.0 minimist: 1.2.8 resolve: 1.22.8 - semver: 7.6.2 + semver: 7.6.3 strip-ansi: 6.0.1 dev: true @@ -11496,6 +11414,10 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + /type-detect/4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + /type-fest/0.12.0: resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} engines: {node: '>=10'} @@ -11597,8 +11519,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - /typescript/5.6.0-dev.20240730: - resolution: {integrity: sha512-i0xbpbeqFm+j2FGOU9ghel5U2nK6FP9mKLbdvms41n1mIjh56sGdexxjHNUUCmQr1rHGZtChRhLkxDcHmj72EA==} + /typescript/5.6.0-dev.20240805: + resolution: {integrity: sha512-M+pWeLKA2huCTB2GLE0/0U/ezJh51Wdmm6J3BS1UxieKcnx1Kz2/NivXOnmCZY40gY6ItpMlLjnJIMXprNG9UQ==} engines: {node: '>=14.17'} hasBin: true @@ -11620,8 +11542,8 @@ packages: /undici-types/5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /undici/6.19.2: - resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==} + /undici/6.19.5: + resolution: {integrity: sha512-LryC15SWzqQsREHIOUybavaIHF5IoL0dJ9aWWxL/PgT1KfqAW5225FZpDUFlt9xiDMS2/S7DOKhFWA7RLksWdg==} engines: {node: '>=18.17'} dev: false @@ -11651,13 +11573,13 @@ packages: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} - /update-browserslist-db/1.1.0_browserslist@4.23.1: + /update-browserslist-db/1.1.0_browserslist@4.23.3: resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.1 + browserslist: 4.23.3 escalade: 3.1.2 picocolors: 1.0.1 dev: true @@ -11740,7 +11662,7 @@ packages: engines: {node: '>=0.8.0'} hasBin: true dependencies: - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: true @@ -11979,8 +11901,8 @@ packages: engines: {node: '>= 6'} dev: false - /yaml/2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + /yaml/2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} hasBin: true dev: false diff --git a/packages/framework-core/src/booster-command-dispatcher.ts b/packages/framework-core/src/booster-command-dispatcher.ts index d36844480..cf7fdc3b0 100644 --- a/packages/framework-core/src/booster-command-dispatcher.ts +++ b/packages/framework-core/src/booster-command-dispatcher.ts @@ -63,7 +63,9 @@ export class BoosterCommandDispatcher { result = await commandClass.handle(commandInstance, register) } catch (err) { const e = err as Error - const error = await this.globalErrorDispatcher.dispatch(new CommandHandlerGlobalError(migratedCommandEnvelope, e)) + const error = await this.globalErrorDispatcher.dispatch( + new CommandHandlerGlobalError(migratedCommandEnvelope, commandMetadata, e) + ) if (error) throw error } logger.debug('Command dispatched with register: ', register) diff --git a/packages/framework-core/src/booster-event-processor.ts b/packages/framework-core/src/booster-event-processor.ts index 1bd71ec8e..79dbb2a36 100644 --- a/packages/framework-core/src/booster-event-processor.ts +++ b/packages/framework-core/src/booster-event-processor.ts @@ -130,7 +130,9 @@ export class BoosterEventProcessor { await eventHandler.handle(eventInstance, register) } catch (e) { const globalErrorDispatcher = new BoosterGlobalErrorDispatcher(config) - const error = await globalErrorDispatcher.dispatch(new EventHandlerGlobalError(eventInstance, e)) + const error = await globalErrorDispatcher.dispatch( + new EventHandlerGlobalError(eventEnvelope, eventInstance, e.eventHandlerMetadata, e) + ) if (error) throw error } await RegisterHandler.handle(config, register) diff --git a/packages/framework-core/src/booster-global-error-dispatcher.ts b/packages/framework-core/src/booster-global-error-dispatcher.ts index d8f0a04d6..5bec87a69 100644 --- a/packages/framework-core/src/booster-global-error-dispatcher.ts +++ b/packages/framework-core/src/booster-global-error-dispatcher.ts @@ -66,7 +66,11 @@ export class BoosterGlobalErrorDispatcher { private async handleCommandError(error: GlobalErrorContainer): Promise { if (!this.errorHandler || !this.errorHandler.onCommandHandlerError) throw error.originalError const currentError = error as CommandHandlerGlobalError - return await this.errorHandler.onCommandHandlerError(currentError.originalError, currentError.command) + return await this.errorHandler.onCommandHandlerError( + currentError.originalError, + currentError.commandEnvelope, + currentError.commandMetadata + ) } private async handleQueryError(error: GlobalErrorContainer): Promise { @@ -78,20 +82,31 @@ export class BoosterGlobalErrorDispatcher { private async handleScheduleError(error: GlobalErrorContainer): Promise { if (!this.errorHandler || !this.errorHandler.onScheduledCommandHandlerError) throw error.originalError const currentError = error as ScheduleCommandGlobalError - return await this.errorHandler.onScheduledCommandHandlerError(currentError.originalError) + return await this.errorHandler.onScheduledCommandHandlerError( + currentError.originalError, + currentError.scheduleCommandEnvelope, + currentError.scheduleCommandMetadata + ) } private async handleEventHandlerError(error: GlobalErrorContainer): Promise { if (!this.errorHandler || !this.errorHandler.onDispatchEventHandlerError) throw error.originalError const currentError = error as EventHandlerGlobalError - return await this.errorHandler.onDispatchEventHandlerError(currentError.originalError, currentError.eventInstance) + return await this.errorHandler.onDispatchEventHandlerError( + currentError.originalError, + currentError.eventEnvelope, + currentError.eventHandlerMetadata, + currentError.eventInstance + ) } - private async handleReducerError(error: GlobalErrorContainer): Promise { + private async handleReducerError(error: GlobalErrorContainer): Promise { if (!this.errorHandler || !this.errorHandler.onReducerError) throw error.originalError const currentError = error as ReducerGlobalError return await this.errorHandler.onReducerError( currentError.originalError, + currentError.eventEnvelope, + currentError.reducerMetadata, currentError.eventInstance, currentError.snapshotInstance ) @@ -102,6 +117,8 @@ export class BoosterGlobalErrorDispatcher { const currentError = error as ProjectionGlobalError return await this.errorHandler.onProjectionError( currentError.originalError, + currentError.entityEnvelope, + currentError.projectionMetadata, currentError.entity, currentError.readModel ) diff --git a/packages/framework-core/src/booster-scheduled-command-dispatcher.ts b/packages/framework-core/src/booster-scheduled-command-dispatcher.ts index 7d79e6586..3c953c8ea 100644 --- a/packages/framework-core/src/booster-scheduled-command-dispatcher.ts +++ b/packages/framework-core/src/booster-scheduled-command-dispatcher.ts @@ -43,7 +43,9 @@ export class BoosterScheduledCommandDispatcher { logger.debug('Calling "handle" method on command: ', command) await command.handle(register) } catch (e) { - const error = await this.globalErrorDispatcher.dispatch(new ScheduleCommandGlobalError(e)) + const error = await this.globalErrorDispatcher.dispatch( + new ScheduleCommandGlobalError(commandEnvelope, commandMetadata, e) + ) if (error) throw error } logger.debug('Command dispatched with register: ', register) diff --git a/packages/framework-core/src/services/event-store.ts b/packages/framework-core/src/services/event-store.ts index dc16a2330..32aff8fce 100644 --- a/packages/framework-core/src/services/event-store.ts +++ b/packages/framework-core/src/services/event-store.ts @@ -13,7 +13,6 @@ import { InvalidReducerError, NonPersistedEntitySnapshotEnvelope, ReducerGlobalError, - SnapshotPersistHandlerGlobalError, TraceActionTypes, UUID, } from '@boostercloud/framework-types' @@ -23,6 +22,7 @@ import { SchemaMigrator } from '../schema-migrator' import { BoosterEntityMigrated } from '../core-concepts/data-migration/events/booster-entity-migrated' import { BoosterEntityTouched } from '../core-concepts/touch-entity/events/booster-entity-touched' import { Trace } from '../instrumentation' +import { ReducerMetadata } from '../../../framework-types' const originOfTime = new Date(0).toISOString() // Unix epoch @@ -67,8 +67,9 @@ export class EventStore { continue } else if (e instanceof InvalidReducerError) { const globalErrorDispatcher = new BoosterGlobalErrorDispatcher(this.config) + const reducerMetadata = this.config.reducers[pendingEvent.typeName] const error = await globalErrorDispatcher.dispatch( - new ReducerGlobalError(e.eventInstance, e.snapshotInstance, e) + new ReducerGlobalError(pendingEvent, e.eventInstance, e.snapshotInstance, reducerMetadata, e) ) if (error) throw error continue @@ -104,7 +105,7 @@ export class EventStore { logger.debug('Storing event in the dispatched event store:', eventEnvelope) return await this.config.provider.events.storeDispatched(eventEnvelope, this.config) } catch (e) { - logger.debug('Could not store dispatched event. Continue its processing.', {error: e, eventEnvelope }) + logger.debug('Could not store dispatched event. Continue its processing.', { error: e, eventEnvelope }) return true } } @@ -118,15 +119,13 @@ export class EventStore { logger.debug('Storing snapshot in the event store:', snapshot) return await this.config.provider.events.storeSnapshot(snapshot, this.config) } catch (e) { - const globalErrorDispatcher = new BoosterGlobalErrorDispatcher(this.config) - const error = await globalErrorDispatcher.dispatch(new SnapshotPersistHandlerGlobalError(snapshot, e)) logger.error( `The snapshot for entity ${snapshot.typeName} with ID ${ snapshot.entityID } couldn't be stored (Tried on ${new Date()})`, snapshot, '\nError:', - error + e ) return } @@ -169,8 +168,15 @@ export class EventStore { const migratedEventEnvelope = await new SchemaMigrator(this.config).migrate(eventEnvelope) const eventInstance = createInstance(eventMetadata.class, migratedEventEnvelope.value) const entityMetadata = this.config.entities[migratedEventEnvelope.entityTypeName] + const reducerMetadata = this.config.reducers[eventEnvelope.typeName] const snapshotInstance = latestSnapshot ? createInstance(entityMetadata.class, latestSnapshot.value) : null - return this.createNewSnapshot(migratedEventEnvelope, eventInstance, snapshotInstance, eventEnvelope) + return this.createNewSnapshot( + migratedEventEnvelope, + eventInstance, + snapshotInstance, + eventEnvelope, + reducerMetadata + ) } private shouldReduceBoosterSuperKind(eventEnvelope: EventEnvelope) { @@ -188,32 +194,40 @@ export class EventStore { return eventMetadata } - private createNewSnapshot( + private async createNewSnapshot( migratedEventEnvelope: EventEnvelope, eventInstance: EventInterface, snapshotInstance: EntityInterface | null, - eventEnvelope: EventEnvelope - ): NonPersistedEntitySnapshotEnvelope { + eventEnvelope: EventEnvelope, + reducerMetadata: ReducerMetadata + ): Promise { const logger = getLogger(this.config, 'createNewSnapshot') - const newEntity = this.reducerForEvent( - migratedEventEnvelope.typeName, - eventInstance, - snapshotInstance - )(eventInstance, snapshotInstance) + try { + const newEntity = this.reducerForEvent( + migratedEventEnvelope.typeName, + eventInstance, + snapshotInstance + )(eventInstance, snapshotInstance) - const newSnapshot: NonPersistedEntitySnapshotEnvelope = { - version: this.config.currentVersionFor(eventEnvelope.entityTypeName), - kind: 'snapshot', - superKind: migratedEventEnvelope.superKind, - requestID: migratedEventEnvelope.requestID, - entityID: migratedEventEnvelope.entityID, - entityTypeName: migratedEventEnvelope.entityTypeName, - typeName: migratedEventEnvelope.entityTypeName, - value: newEntity, - snapshottedEventCreatedAt: migratedEventEnvelope.createdAt, + const newSnapshot: NonPersistedEntitySnapshotEnvelope = { + version: this.config.currentVersionFor(eventEnvelope.entityTypeName), + kind: 'snapshot', + superKind: migratedEventEnvelope.superKind, + requestID: migratedEventEnvelope.requestID, + entityID: migratedEventEnvelope.entityID, + entityTypeName: migratedEventEnvelope.entityTypeName, + typeName: migratedEventEnvelope.entityTypeName, + value: newEntity, + snapshottedEventCreatedAt: migratedEventEnvelope.createdAt, + } + logger.debug('Reducer result: ', newSnapshot) + return newSnapshot + } catch (e) { + const globalErrorDispatcher = new BoosterGlobalErrorDispatcher(this.config) + throw await globalErrorDispatcher.dispatch( + new ReducerGlobalError(migratedEventEnvelope, eventInstance, snapshotInstance, reducerMetadata, e) + ) } - logger.debug('Reducer result: ', newSnapshot) - return newSnapshot } private async reduceSuperKind( @@ -272,11 +286,11 @@ export class EventStore { return boosterMigratedSnapshot } - // eslint-disable-next-line @typescript-eslint/ban-types private reducerForEvent( eventName: string, eventInstance: EventInterface, snapshotInstance: EntityInterface | null + // eslint-disable-next-line @typescript-eslint/ban-types ): Function { const logger = getLogger(this.config, 'EventStore#reducerForEvent') const reducerMetadata = this.config.reducers[eventName] @@ -285,10 +299,9 @@ export class EventStore { } else { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const reducer = (reducerMetadata.class as any)[reducerMetadata.methodName] - logger.debug( - `Found reducer for event ${eventName}: "${reducerMetadata.class.name}.${reducerMetadata.methodName}"` - ) + const methodName = reducerMetadata.methodName + const reducer = (reducerMetadata.class as any)[methodName] + logger.debug(`Found reducer for event ${eventName}: "${reducerMetadata.class.name}.${methodName}"`) return reducer } catch { throw new Error(`Couldn't load the Entity class ${reducerMetadata.class.name}`) diff --git a/packages/framework-core/src/services/read-model-store.ts b/packages/framework-core/src/services/read-model-store.ts index b0edbc39f..d83e5b323 100644 --- a/packages/framework-core/src/services/read-model-store.ts +++ b/packages/framework-core/src/services/read-model-store.ts @@ -256,6 +256,7 @@ export class ReadModelStore { return retryIfError( (tryNumber?: number) => this.applyProjectionToReadModel( + entitySnapshotEnvelope, entityInstance, projectionMetadata, currentReadModel, @@ -281,6 +282,7 @@ export class ReadModelStore { } private async applyProjectionToReadModel( + entitySnapshotEnvelope: EntitySnapshotEnvelope, entity: EntityInterface, projectionMetadata: ProjectionMetadata, currentReadModel?: ReadModelInterface, @@ -318,10 +320,18 @@ export class ReadModelStore { let newReadModel: any try { - newReadModel = await this.callProjectionFunction(projectionMetadata, entity, migratedReadModel, readModelID) + newReadModel = await this.callProjectionFunction( + entitySnapshotEnvelope, + projectionMetadata, + entity, + migratedReadModel, + readModelID + ) } catch (e) { const globalErrorDispatcher = new BoosterGlobalErrorDispatcher(this.config) - const error = await globalErrorDispatcher.dispatch(new ProjectionGlobalError(entity, migratedReadModel, e)) + const error = await globalErrorDispatcher.dispatch( + new ProjectionGlobalError(entitySnapshotEnvelope, entity, migratedReadModel, projectionMetadata, e) + ) if (error) throw error } @@ -385,6 +395,7 @@ export class ReadModelStore { } private async callProjectionFunction( + entitySnapshotEnvelope: EntitySnapshotEnvelope, projectionMetadata: ProjectionMetadata, entity: EntityInterface, migratedReadModel: ReadModelInterface | undefined, @@ -401,7 +412,9 @@ export class ReadModelStore { return projectionFunction(entity, readModelID, migratedReadModel || null) } catch (e) { const globalErrorDispatcher = new BoosterGlobalErrorDispatcher(this.config) - const error = await globalErrorDispatcher.dispatch(new ProjectionGlobalError(entity, migratedReadModel, e)) + const error = await globalErrorDispatcher.dispatch( + new ProjectionGlobalError(entitySnapshotEnvelope, entity, migratedReadModel, projectionMetadata, e) + ) if (error) throw error } return undefined diff --git a/packages/framework-core/test/booster-global-error-dispatcher.test.ts b/packages/framework-core/test/booster-global-error-dispatcher.test.ts index 0ccc3a2a5..4c524c16f 100644 --- a/packages/framework-core/test/booster-global-error-dispatcher.test.ts +++ b/packages/framework-core/test/booster-global-error-dispatcher.test.ts @@ -3,22 +3,28 @@ import { BoosterConfig, CommandEnvelope, CommandHandlerGlobalError, + CommandMetadata, EntityInterface, EntitySnapshotEnvelope, + EventEnvelope, EventHandlerGlobalError, EventInterface, GlobalErrorContainer, GlobalErrorHandlerMetadata, ProjectionGlobalError, + ProjectionMetadata, ReadModelInterface, ReducerGlobalError, + ReducerMetadata, ScheduleCommandGlobalError, - SnapshotPersistHandlerGlobalError, + ScheduledCommandEnvelope, + ScheduledCommandMetadata, } from '@boostercloud/framework-types' import { GlobalErrorHandler } from '../src' import { restore } from 'sinon' import { Booster } from '../src/booster' import { BoosterGlobalErrorDispatcher } from '../src/booster-global-error-dispatcher' +import 'mocha' describe('BoosterGlobalErrorDispatcher', () => { let config: BoosterConfig @@ -66,7 +72,11 @@ describe('BoosterGlobalErrorDispatcher', () => { it('should dispatch original error if there is an error processing them', async () => { @GlobalErrorHandler() class ErrorHandler { - public static async onScheduledCommandHandlerError(error: Error): Promise { + public static async onScheduledCommandHandlerError( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise { throw new Error('failed') } @@ -75,7 +85,9 @@ describe('BoosterGlobalErrorDispatcher', () => { } } - const scheduleCommandGlobalError = new ScheduleCommandGlobalError(baseError) + const envelope: ScheduledCommandEnvelope = {} as ScheduledCommandEnvelope + const metadata: ScheduledCommandMetadata = {} as ScheduledCommandMetadata + const scheduleCommandGlobalError = new ScheduleCommandGlobalError(envelope, metadata, baseError) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(scheduleCommandGlobalError) @@ -85,7 +97,11 @@ describe('BoosterGlobalErrorDispatcher', () => { it('should dispatch specific and generic handler if both are defined for a specific error', async () => { @GlobalErrorHandler() class ErrorHandler { - public static async onScheduledCommandHandlerError(error: Error): Promise { + public static async onScheduledCommandHandlerError( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise { return new Error(`${error}.onScheduledCommandHandlerError`) } @@ -94,7 +110,9 @@ describe('BoosterGlobalErrorDispatcher', () => { } } - const scheduleCommandGlobalError = new ScheduleCommandGlobalError(baseError) + const envelope: ScheduledCommandEnvelope = {} as ScheduledCommandEnvelope + const metadata: ScheduledCommandMetadata = {} as ScheduledCommandMetadata + const scheduleCommandGlobalError = new ScheduleCommandGlobalError(envelope, metadata, baseError) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(scheduleCommandGlobalError) @@ -111,7 +129,8 @@ describe('BoosterGlobalErrorDispatcher', () => { } } const mockCommand = {} as CommandEnvelope - const commandHandlerGlobalError = new CommandHandlerGlobalError(mockCommand, baseError) + const mockMetadata: CommandMetadata = {} as CommandMetadata + const commandHandlerGlobalError = new CommandHandlerGlobalError(mockCommand, mockMetadata, baseError) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(commandHandlerGlobalError) @@ -129,7 +148,14 @@ describe('BoosterGlobalErrorDispatcher', () => { } } const mockEventInstance = {} as EventInterface - const eventHandlerGlobalError = new EventHandlerGlobalError(mockEventInstance, baseError) + const mockEventEnvelope: EventEnvelope = {} as EventEnvelope + const mockEventHandlerMetadata = {} + const eventHandlerGlobalError = new EventHandlerGlobalError( + mockEventEnvelope, + mockEventInstance, + mockEventHandlerMetadata, + baseError + ) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(eventHandlerGlobalError) @@ -141,15 +167,25 @@ describe('BoosterGlobalErrorDispatcher', () => { class ErrorHandler { public static async onReducerError( error: Error, + eventEnvelope: EventEnvelope, + reducerMetadata: ReducerMetadata, eventInstance: EventInterface, snapshotInstance: EntityInterface | null - ): Promise { + ): Promise { return new Error(`${error}.onReducerError`) } } + const mockEventEnvelope: EventEnvelope = {} as EventEnvelope const mockEventInstance = {} as EventInterface const mockSnapshotInstance = {} as EntityInterface - const reducerGlobalError = new ReducerGlobalError(mockEventInstance, mockSnapshotInstance, baseError) + const reducerMetadata: ReducerMetadata = {} as ReducerMetadata + const reducerGlobalError = new ReducerGlobalError( + mockEventEnvelope, + mockEventInstance, + mockSnapshotInstance, + reducerMetadata, + baseError + ) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(reducerGlobalError) @@ -161,53 +197,61 @@ describe('BoosterGlobalErrorDispatcher', () => { class ErrorHandler { public static async onProjectionError( error: Error, + entityEnvelope: EntitySnapshotEnvelope, + projectionMetadata: ProjectionMetadata, entity: EntityInterface, readModel: ReadModelInterface | undefined ): Promise { return new Error(`${error}.onProjectionError`) } } + const mockEntityEnvelope: EntitySnapshotEnvelope = {} as EntitySnapshotEnvelope const mockEntity = {} as EntityInterface const mockReadModel = {} as ReadModelInterface - const projectionGlobalError = new ProjectionGlobalError(mockEntity, mockReadModel, baseError) + const mockProjectionMetadata: ProjectionMetadata = {} as ProjectionMetadata< + EntityInterface, + ReadModelInterface + > + const projectionGlobalError = new ProjectionGlobalError( + mockEntityEnvelope, + mockEntity, + mockReadModel, + mockProjectionMetadata, + baseError + ) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(projectionGlobalError) expect(result?.toString()).to.be.eq(`Error: Error: ${baseError.message}.onProjectionError`) }) - it('should dispatch SnapshotPersistHandlerGlobalError', async () => { - @GlobalErrorHandler() - class ErrorHandler { - public static async onSnapshotPersistError( - error: Error, - snapshot: EntitySnapshotEnvelope - ): Promise { - return new Error(`${error}.onSnapshotPersistError`) - } - } - const mockSnapshot = {} as EntitySnapshotEnvelope - const snapshotPersistHandlerGlobalError = new SnapshotPersistHandlerGlobalError(mockSnapshot, baseError) - config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata - const errorDispatcher = new BoosterGlobalErrorDispatcher(config) - const result = await errorDispatcher.dispatch(snapshotPersistHandlerGlobalError) - expect(result?.toString()).to.be.eq(`Error: Error: ${baseError.message}.onSnapshotPersistError`) - }) - it('should ignore errors on ProjectionGlobalError if undefined is returned', async () => { @GlobalErrorHandler() class ErrorHandler { public static async onProjectionError( error: Error, + entityEnvelope: EntitySnapshotEnvelope, + projectionMetadata: ProjectionMetadata, entity: EntityInterface, readModel: ReadModelInterface | undefined ): Promise { return undefined } } + const mockEntityEnvelope: EntitySnapshotEnvelope = {} as EntitySnapshotEnvelope const mockEntity = {} as EntityInterface const mockReadModel = {} as ReadModelInterface - const projectionGlobalError = new ProjectionGlobalError(mockEntity, mockReadModel, baseError) + const mockProjectionMetadata: ProjectionMetadata = {} as ProjectionMetadata< + EntityInterface, + ReadModelInterface + > + const projectionGlobalError = new ProjectionGlobalError( + mockEntityEnvelope, + mockEntity, + mockReadModel, + mockProjectionMetadata, + baseError + ) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(projectionGlobalError) @@ -217,7 +261,11 @@ describe('BoosterGlobalErrorDispatcher', () => { it('should ignore erros if generic handler returns an undefined', async () => { @GlobalErrorHandler() class ErrorHandler { - public static async onScheduledCommandHandlerError(error: Error): Promise { + public static async onScheduledCommandHandlerError( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise { return new Error(`${error}.onScheduledCommandHandlerError`) } @@ -226,7 +274,9 @@ describe('BoosterGlobalErrorDispatcher', () => { } } - const scheduleCommandGlobalError = new ScheduleCommandGlobalError(baseError) + const envelope: ScheduledCommandEnvelope = {} as ScheduledCommandEnvelope + const metadata: ScheduledCommandMetadata = {} as ScheduledCommandMetadata + const scheduleCommandGlobalError = new ScheduleCommandGlobalError(envelope, metadata, baseError) config.globalErrorsHandler = { class: ErrorHandler } as GlobalErrorHandlerMetadata const errorDispatcher = new BoosterGlobalErrorDispatcher(config) const result = await errorDispatcher.dispatch(scheduleCommandGlobalError) diff --git a/packages/framework-core/test/decorators/global-error-handler.test.ts b/packages/framework-core/test/decorators/global-error-handler.test.ts index 9a9ce5463..54d6a4557 100644 --- a/packages/framework-core/test/decorators/global-error-handler.test.ts +++ b/packages/framework-core/test/decorators/global-error-handler.test.ts @@ -2,7 +2,20 @@ /* eslint-disable @typescript-eslint/explicit-function-return-type */ import { expect } from '../expect' import { GlobalErrorHandler, Booster } from '../../src' -import { CommandEnvelope, EntityInterface, EventInterface, ReadModelInterface } from '@boostercloud/framework-types' +import { + CommandEnvelope, + CommandMetadata, + EntityInterface, + EntitySnapshotEnvelope, + EventEnvelope, + EventInterface, + NotificationInterface, + ProjectionMetadata, + ReadModelInterface, + ReducerMetadata, + ScheduledCommandEnvelope, + ScheduledCommandMetadata, +} from '@boostercloud/framework-types' describe('the `GlobalErrorHandler` decorator', () => { afterEach(() => { @@ -27,16 +40,26 @@ describe('the `GlobalErrorHandler` decorator', () => { // Register command @GlobalErrorHandler() class ErrorHandler { - public static async onCommandHandlerError(error: Error, command: CommandEnvelope): Promise { + public static async onCommandHandlerError( + error: Error, + commandEnvelope: CommandEnvelope, + commandMetadata: CommandMetadata + ): Promise { return new Error('') } - public static async onScheduledCommandHandlerError(error: Error): Promise { + public static async onScheduledCommandHandlerError( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise { return new Error('') } public static async onDispatchEventHandlerError( error: Error, + eventEnvelope: EventEnvelope | NotificationInterface, + eventHandlerMetadata: unknown, eventInstance: EventInterface ): Promise { return new Error('') @@ -44,6 +67,8 @@ describe('the `GlobalErrorHandler` decorator', () => { public static async onProjectionError( error: Error, + entityEnvelope: EntitySnapshotEnvelope, + projectionMetadata: ProjectionMetadata, entity: EntityInterface, readModel: ReadModelInterface | undefined ): Promise { @@ -52,6 +77,8 @@ describe('the `GlobalErrorHandler` decorator', () => { public static async onReducerError( error: Error, + eventEnvelope: EventEnvelope, + reducerMetadata: ReducerMetadata, eventInstance: EventInterface, snapshotInstance: EntityInterface | null ): Promise { diff --git a/packages/framework-core/test/services/event-store.test.ts b/packages/framework-core/test/services/event-store.test.ts index 3d29352d3..4e773181b 100644 --- a/packages/framework-core/test/services/event-store.test.ts +++ b/packages/framework-core/test/services/event-store.test.ts @@ -801,7 +801,7 @@ describe('EventStore', () => { eventInstance.entityID = someEvent.entityID const entityInstance = new AnEntity(someEntity.id, someEntity.count) - expect(eventStore.reducerForEvent).to.have.been.calledOnceWith(AnEvent.name) + expect(eventStore.reducerForEvent).to.have.been.calledOnceWith(AnEvent.name, eventInstance) expect(fakeReducer).to.have.been.calledOnceWith(eventInstance, entityInstance) expect(newSnapshot).to.be.deep.equal({ @@ -837,7 +837,7 @@ describe('EventStore', () => { const eventInstance = new AnEvent(someEvent.id, someEvent.entityId, someEvent.delta) eventInstance.entityID = someEvent.entityID - expect(eventStore.reducerForEvent).to.have.been.calledOnceWith(AnEvent.name) + expect(eventStore.reducerForEvent).to.have.been.calledOnceWith(AnEvent.name, eventInstance) expect(fakeReducer).to.have.been.calledOnceWith(eventInstance, null) expect(newSnapshot).to.be.deep.equal({ @@ -926,20 +926,15 @@ describe('EventStore', () => { describe('reducerForEvent', () => { context('for an event with a registered reducer', () => { it('returns the proper reducer method for the event', () => { - const reducer = eventStore.reducerForEvent(AnEvent.name) + const reducer = eventStore.reducerForEvent(AnEvent.name, { + class: AnEntity, + methodName: 'reducerThatCallsEntityMethod', + }) expect(reducer).to.be.instanceOf(Function) expect(reducer).to.be.equal(eval('AnEntity')['reducerThatCallsEntityMethod']) }) }) - - context('for events without registered reducers', () => { - it('fails miserably', () => { - expect(() => eventStore.reducerForEvent('InventedEvent')).to.throw( - /No reducer registered for event InventedEvent/ - ) - }) - }) }) }) }) diff --git a/packages/framework-core/test/services/read-model-store.test.ts b/packages/framework-core/test/services/read-model-store.test.ts index c3a14635b..0987edb01 100644 --- a/packages/framework-core/test/services/read-model-store.test.ts +++ b/packages/framework-core/test/services/read-model-store.test.ts @@ -840,6 +840,7 @@ describe('ReadModelStore', () => { for (const projectionMetadata of config.projections[AnImportantEntity.name]) { const readModelClassName = projectionMetadata.class.name expect(fakeApplyProjectionToReadModel).to.have.been.calledWith( + anEntitySnapshot, anEntityInstance, projectionMetadata, undefined, diff --git a/packages/framework-integration-tests/integration/provider-unaware/functionality/errors.integration.ts b/packages/framework-integration-tests/integration/provider-unaware/functionality/errors.integration.ts index e08bf3d9f..de8760f74 100644 --- a/packages/framework-integration-tests/integration/provider-unaware/functionality/errors.integration.ts +++ b/packages/framework-integration-tests/integration/provider-unaware/functionality/errors.integration.ts @@ -11,6 +11,7 @@ import { queryHandlerErrorCartId, queryHandlerErrorCartMessage, } from '../../../src/constants' +import 'mocha' describe('Global error handler', async () => { let client: ApolloClient @@ -23,7 +24,7 @@ describe('Global error handler', async () => { context('CommandHandler', async () => { it('should update error object when handler fails', async () => { - const expectedErrorMessage = `${commandHandlerErrorCartMessage}-onCommandHandlerError-onError` + const expectedErrorMessage = `${commandHandlerErrorCartMessage}-onCommandHandlerError with metadata: {"before":[null,null],"properties":[{"name":"cartId","typeInfo":{"name":"UUID","typeGroup":"Class","isNullable":false,"isGetAccessor":false,"parameters":[],"importPath":"@boostercloud/framework-types","typeName":"UUID"}},{"name":"productId","typeInfo":{"name":"UUID","typeGroup":"Class","isNullable":false,"isGetAccessor":false,"parameters":[],"importPath":"@boostercloud/framework-types","typeName":"UUID"}},{"name":"quantity","typeInfo":{"name":"number","typeGroup":"Number","isNullable":false,"isGetAccessor":false,"parameters":[],"typeName":"Number"}},{"name":"test","typeInfo":{"name":"number","typeGroup":"Number","isNullable":false,"isGetAccessor":false,"parameters":[],"typeName":"Number"}}],"methods":[{"name":"beforeFn","typeInfo":{"name":"Promise","typeGroup":"Object","isNullable":false,"isGetAccessor":false,"parameters":[{"name":"CommandInput","typeGroup":"Type","isNullable":false,"isGetAccessor":false,"parameters":[]}],"typeName":"Promise"}},{"name":"beforeFnV2","typeInfo":{"name":"Promise","typeGroup":"Object","isNullable":false,"isGetAccessor":false,"parameters":[{"name":"CommandInput","typeGroup":"Type","isNullable":false,"isGetAccessor":false,"parameters":[]}],"typeName":"Promise"}},{"name":"handle","typeInfo":{"name":"Promise","typeGroup":"Object","isNullable":false,"isGetAccessor":false,"parameters":[{"name":"void","typeGroup":"Other","isNullable":false,"isGetAccessor":false,"parameters":[]}],"typeName":"Promise"}}]}-onError` await expect( client.mutate({ variables: { @@ -58,7 +59,7 @@ describe('Global error handler', async () => { }) it('should update error object when onBefore fails', async () => { - const expectedErrorMessage = `${commandHandlerBeforeErrorCartMessage}-onBeforeCommandHandlerError-onError` + const expectedErrorMessage = `${commandHandlerBeforeErrorCartMessage}-onBeforeCommandHandlerError with metadata: {"before":[null,null],"properties":[{"name":"cartId","typeInfo":{"name":"UUID","typeGroup":"Class","isNullable":false,"isGetAccessor":false,"parameters":[],"importPath":"@boostercloud/framework-types","typeName":"UUID"}},{"name":"productId","typeInfo":{"name":"UUID","typeGroup":"Class","isNullable":false,"isGetAccessor":false,"parameters":[],"importPath":"@boostercloud/framework-types","typeName":"UUID"}},{"name":"quantity","typeInfo":{"name":"number","typeGroup":"Number","isNullable":false,"isGetAccessor":false,"parameters":[],"typeName":"Number"}},{"name":"test","typeInfo":{"name":"number","typeGroup":"Number","isNullable":false,"isGetAccessor":false,"parameters":[],"typeName":"Number"}}],"methods":[{"name":"beforeFn","typeInfo":{"name":"Promise","typeGroup":"Object","isNullable":false,"isGetAccessor":false,"parameters":[{"name":"CommandInput","typeGroup":"Type","isNullable":false,"isGetAccessor":false,"parameters":[]}],"typeName":"Promise"}},{"name":"beforeFnV2","typeInfo":{"name":"Promise","typeGroup":"Object","isNullable":false,"isGetAccessor":false,"parameters":[{"name":"CommandInput","typeGroup":"Type","isNullable":false,"isGetAccessor":false,"parameters":[]}],"typeName":"Promise"}},{"name":"handle","typeInfo":{"name":"Promise","typeGroup":"Object","isNullable":false,"isGetAccessor":false,"parameters":[{"name":"void","typeGroup":"Other","isNullable":false,"isGetAccessor":false,"parameters":[]}],"typeName":"Promise"}}]}-onError` await expect( client.mutate({ variables: { diff --git a/packages/framework-integration-tests/src/common/app-error-handler.ts b/packages/framework-integration-tests/src/common/app-error-handler.ts index 7428ce3df..ffef06eac 100644 --- a/packages/framework-integration-tests/src/common/app-error-handler.ts +++ b/packages/framework-integration-tests/src/common/app-error-handler.ts @@ -2,11 +2,18 @@ import { GlobalErrorHandler } from '@boostercloud/framework-core' import { CommandEnvelope, + CommandMetadata, EntityInterface, + EntitySnapshotEnvelope, EventEnvelope, EventInterface, + NotificationInterface, + ProjectionMetadata, QueryEnvelope, ReadModelInterface, + ReducerMetadata, + ScheduledCommandEnvelope, + ScheduledCommandMetadata, } from '@boostercloud/framework-types' import { commandHandlerBeforeErrorCartId, @@ -22,15 +29,21 @@ import { @GlobalErrorHandler() export class AppErrorHandler { - public static async onCommandHandlerError(error: Error, command: CommandEnvelope): Promise { - if (command.value.cartId === commandHandlerErrorIgnoredCartId) { + public static async onCommandHandlerError( + error: Error, + commandEnvelope: CommandEnvelope, + commandMetadata: CommandMetadata + ): Promise { + console.log(commandEnvelope) + console.log(commandMetadata) + if (commandEnvelope.value.cartId === commandHandlerErrorIgnoredCartId) { return undefined } - if (command.value.cartId === commandHandlerErrorCartId) { - return new Error(error.message + '-onCommandHandlerError') + if (commandEnvelope.value.cartId === commandHandlerErrorCartId) { + return new Error(`${error.message}-onCommandHandlerError with metadata: ${JSON.stringify(commandMetadata)}`) } - if (command.value.cartId === commandHandlerBeforeErrorCartId) { - return new Error(error.message + '-onBeforeCommandHandlerError') + if (commandEnvelope.value.cartId === commandHandlerBeforeErrorCartId) { + return new Error(`${error.message}-onBeforeCommandHandlerError with metadata: ${JSON.stringify(commandMetadata)}`) } return error } @@ -42,41 +55,65 @@ export class AppErrorHandler { return error } - public static async onScheduledCommandHandlerError(error: Error): Promise { + public static async onScheduledCommandHandlerError( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise { console.log('onScheduledCommandHandlerError') - return error + console.log(scheduledCommandEnvelope) + console.log(scheduledCommandMetadata) + return new Error( + `${error.message}-onScheduledCommandHandlerError with metadata: ${JSON.stringify(scheduledCommandMetadata)}` + ) } public static async onDispatchEventHandlerError( error: Error, + eventEnvelope: EventEnvelope | NotificationInterface, + eventHandlerMetadata: unknown, eventInstance: EventInterface ): Promise { - const getEntityID = eventInstance?.entityID ?? (() => '') - if (getEntityID() === dispatchEventErrorCartId) { - return new Error(error.message + '-onDispatchEventHandlerError') + console.log(eventEnvelope) + console.log(eventHandlerMetadata) + const entityId = eventInstance?.entityID ? eventInstance.entityID() : '' + if (entityId === dispatchEventErrorCartId) { + return new Error( + `${error.message}-onDispatchEventHandlerError with metadata: ${JSON.stringify(eventHandlerMetadata)}` + ) } return error } public static async onReducerError( error: Error, + eventEnvelope: EventEnvelope, + reducerMetadata: ReducerMetadata, eventInstance: EventInterface, snapshotInstance: EntityInterface | null - ): Promise { - const getEntityID = eventInstance?.entityID ?? (() => '') - if (getEntityID() === reducerErrorCartId) { - return new Error(error.message + '-onReducerError') + ): Promise { + console.log(eventEnvelope) + console.log(reducerMetadata) + console.log(snapshotInstance) + const entityId = eventInstance?.entityID ? eventInstance.entityID() : '' + if (entityId === reducerErrorCartId) { + return new Error(`${error.message}-onReducerError with metadata: ${JSON.stringify(reducerMetadata)}`) } return error } public static async onProjectionError( error: Error, + entityEnvelope: EntitySnapshotEnvelope, + projectionMetadata: ProjectionMetadata, entity: EntityInterface, readModel: ReadModelInterface | undefined ): Promise { + console.log(entityEnvelope) + console.log(projectionMetadata) + console.log(readModel) if (entity?.id === projectionErrorCartId) { - return new Error(error.message + '-onProjectionError') + return new Error(`${error.message}-onProjectionError with metadata: ${JSON.stringify(projectionMetadata)}`) } return error } diff --git a/packages/framework-types/src/concepts/global-error-handler-metadata.ts b/packages/framework-types/src/concepts/global-error-handler-metadata.ts index 732da0efe..876cf5e95 100644 --- a/packages/framework-types/src/concepts/global-error-handler-metadata.ts +++ b/packages/framework-types/src/concepts/global-error-handler-metadata.ts @@ -1,21 +1,50 @@ import { AnyClass } from '../typelevel' -import { CommandEnvelope, EventEnvelope, NonPersistedEntitySnapshotEnvelope, QueryEnvelope } from '../envelope' +import { + CommandEnvelope, + EntitySnapshotEnvelope, + EventEnvelope, + NonPersistedEntitySnapshotEnvelope, + QueryEnvelope, + ScheduledCommandEnvelope, +} from '../envelope' import { EventInterface } from './event' import { ReadModelInterface } from './read-model' import { EntityInterface } from './entity' +import { ReducerMetadata } from './reducer-metadata' +import { ScheduledCommandMetadata } from './scheduled-command' +import { CommandMetadata } from './command' +import { ProjectionMetadata } from './projection-metadata' +import { NotificationInterface } from './notification' export interface GlobalErrorHandlerInterface extends AnyClass { - onCommandHandlerError?(error: Error, command: CommandEnvelope): Promise + onCommandHandlerError?( + error: Error, + commandEnvelope: CommandEnvelope, + commandMetadata: CommandMetadata + ): Promise onQueryHandlerError?(error: Error, query: QueryEnvelope): Promise - onScheduledCommandHandlerError?(error: Error): Promise - onDispatchEventHandlerError?(error: Error, eventInstance: EventInterface): Promise + onScheduledCommandHandlerError?( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise + onDispatchEventHandlerError?( + error: Error, + eventEnvelope: EventEnvelope | NotificationInterface, + eventHandlerMetadata: unknown, + eventInstance: EventInterface + ): Promise onReducerError?( error: Error, + eventEnvelope: EventEnvelope, + reducerMetadata: ReducerMetadata, eventInstance: EventInterface, snapshotInstance: EntityInterface | null - ): Promise + ): Promise onProjectionError?( error: Error, + entityEnvelope: EntitySnapshotEnvelope, + projectionMetadata: ProjectionMetadata, entity: EntityInterface, readModel: ReadModelInterface | undefined ): Promise diff --git a/packages/framework-types/src/errors/command-handler-global-error.ts b/packages/framework-types/src/errors/command-handler-global-error.ts index a95ca7000..04c148ff5 100644 --- a/packages/framework-types/src/errors/command-handler-global-error.ts +++ b/packages/framework-types/src/errors/command-handler-global-error.ts @@ -1,8 +1,13 @@ import { GlobalErrorContainer } from './global-error-container' import { CommandEnvelope } from '../envelope' +import { CommandMetadata } from '../concepts' export class CommandHandlerGlobalError extends GlobalErrorContainer { - constructor(readonly command: CommandEnvelope, originalError: Error) { + constructor( + readonly commandEnvelope: CommandEnvelope, + readonly commandMetadata: CommandMetadata, + originalError: Error + ) { super(originalError) } } diff --git a/packages/framework-types/src/errors/event-handler-global-error.ts b/packages/framework-types/src/errors/event-handler-global-error.ts index 5f413cec4..4d20839bf 100644 --- a/packages/framework-types/src/errors/event-handler-global-error.ts +++ b/packages/framework-types/src/errors/event-handler-global-error.ts @@ -1,8 +1,14 @@ import { GlobalErrorContainer } from './global-error-container' -import { EventInterface } from '../concepts' +import { EventInterface, NotificationInterface } from '../concepts' +import { EventEnvelope } from '../envelope' export class EventHandlerGlobalError extends GlobalErrorContainer { - constructor(readonly eventInstance: EventInterface, originalError: Error) { + constructor( + readonly eventEnvelope: EventEnvelope | NotificationInterface, + readonly eventInstance: EventInterface, + readonly eventHandlerMetadata: unknown, + originalError: Error + ) { super(originalError) } } diff --git a/packages/framework-types/src/errors/index.ts b/packages/framework-types/src/errors/index.ts index 5463e2ade..e9e67735f 100644 --- a/packages/framework-types/src/errors/index.ts +++ b/packages/framework-types/src/errors/index.ts @@ -3,7 +3,6 @@ export * from './query-handler-global-error' export * from './event-handler-global-error' export * from './global-error-container' export * from './projection-global-error' -export * from './read-model-global-error' export * from './reducer-global-error' export * from './schedule-command-global-error' export * from './snapshot-persist-handler-global-error' diff --git a/packages/framework-types/src/errors/projection-global-error.ts b/packages/framework-types/src/errors/projection-global-error.ts index 16e56735d..3da287444 100644 --- a/packages/framework-types/src/errors/projection-global-error.ts +++ b/packages/framework-types/src/errors/projection-global-error.ts @@ -1,10 +1,13 @@ import { GlobalErrorContainer } from './global-error-container' -import { EntityInterface, ReadModelInterface } from '../concepts' +import { EntityInterface, ProjectionMetadata, ReadModelInterface } from '../concepts' +import { EntitySnapshotEnvelope } from '../envelope' export class ProjectionGlobalError extends GlobalErrorContainer { constructor( + readonly entityEnvelope: EntitySnapshotEnvelope, readonly entity: EntityInterface, readonly readModel: ReadModelInterface | undefined, + readonly projectionMetadata: ProjectionMetadata, originalError: Error ) { super(originalError) diff --git a/packages/framework-types/src/errors/read-model-global-error.ts b/packages/framework-types/src/errors/read-model-global-error.ts deleted file mode 100644 index 24175f1d6..000000000 --- a/packages/framework-types/src/errors/read-model-global-error.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { GlobalErrorContainer } from './global-error-container' - -export class ReadModelGlobalError extends GlobalErrorContainer {} diff --git a/packages/framework-types/src/errors/reducer-global-error.ts b/packages/framework-types/src/errors/reducer-global-error.ts index 49f109ed5..7aed1ac05 100644 --- a/packages/framework-types/src/errors/reducer-global-error.ts +++ b/packages/framework-types/src/errors/reducer-global-error.ts @@ -1,10 +1,13 @@ import { GlobalErrorContainer } from './global-error-container' -import { EntityInterface, EventInterface } from '../concepts' +import { EntityInterface, EventInterface, ReducerMetadata } from '../concepts' +import { EventEnvelope } from '../envelope' export class ReducerGlobalError extends GlobalErrorContainer { constructor( + readonly eventEnvelope: EventEnvelope, readonly eventInstance: EventInterface, readonly snapshotInstance: EntityInterface | null, + readonly reducerMetadata: ReducerMetadata, originalError: Error ) { super(originalError) diff --git a/packages/framework-types/src/errors/schedule-command-global-error.ts b/packages/framework-types/src/errors/schedule-command-global-error.ts index db900b017..0c996e9cf 100644 --- a/packages/framework-types/src/errors/schedule-command-global-error.ts +++ b/packages/framework-types/src/errors/schedule-command-global-error.ts @@ -1,3 +1,13 @@ import { GlobalErrorContainer } from './global-error-container' +import { ScheduledCommandMetadata } from '../concepts' +import { ScheduledCommandEnvelope } from '../envelope' -export class ScheduleCommandGlobalError extends GlobalErrorContainer {} +export class ScheduleCommandGlobalError extends GlobalErrorContainer { + constructor( + readonly scheduleCommandEnvelope: ScheduledCommandEnvelope, + readonly scheduleCommandMetadata: ScheduledCommandMetadata, + originalError: Error + ) { + super(originalError) + } +} diff --git a/website/docs/03_features/05_error-handling.md b/website/docs/03_features/05_error-handling.md index 8d93fb31c..0899b07c1 100644 --- a/website/docs/03_features/05_error-handling.md +++ b/website/docs/03_features/05_error-handling.md @@ -2,13 +2,13 @@ ## Error handling in Booster -Booster provides a default error handling mechanism that will try to catch all the errors that are thrown in the application and will log them. This is useful for debugging purposes, but you may want to customize the error handling in your application. For example, you may want to send an email to the administrator when an error occurs. +Booster provides a default error handling mechanism that will try to catch all the errors that are thrown in the application and will log them. This is useful for debugging purposes, but you may want to customize the error handling in your application. For example, you may want to email the administrator when an error occurs. ### Custom error handling To customize the error handling, you need to create a class decorated with the `@GlobalErrorHandler` decorator. This class will contain the methods that will be called when an error is thrown. There is one method for each component in the application where an error can be thrown. All these functions receive the error that was thrown and the information about the component that was being executed when the error occurred. -They must return a promise that resolves to an `Error` object or `undefined`. If the promise resolves to `undefined`, the error will be ignored and the application will continue working. If the promise resolves to an `Error` object, the error will be thrown. +They must return a promise that resolves to an `Error` object or `undefined`. If the promise resolves to `undefined`, the error will be ignored and **Booster** will continue working. If the promise resolves to an `Error` object, the error will be thrown and **Booster** will handle it on a case-by-case basis in the default way. ### Command handle errors @@ -17,7 +17,11 @@ These are the errors that are thrown in the `handle` method of the `@Command`. Y ```typescript @GlobalErrorHandler() export class MyErrorHandler { - public onCommandHandlerError(error: Error, command: CommandEnvelope): Promise { + public static async onCommandHandlerError( + error: Error, + commandEnvelope: CommandEnvelope, + commandMetadata: CommandMetadata + ): Promise { // Do something with the error } } @@ -32,13 +36,17 @@ These are the errors that are thrown in the `handle` method of the `@ScheduledCo ```typescript @GlobalErrorHandler() export class MyErrorHandler { - public onScheduledCommandHandlerError(error: Error): Promise { + public static async onScheduledCommandHandlerError( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise { // Do something with the error } } ``` -This method receives the error that was thrown. +Note that if an error is thrown on a ScheduleCommand, **Booster** will stop working. ### Event handler errors @@ -47,14 +55,17 @@ These are the errors that are thrown in the `handle` method of the `@Event`. You ```typescript @GlobalErrorHandler() export class MyErrorHandler { - public onEventHandlerError(error: Error, event: EventEnvelope): Promise { + public static async onDispatchEventHandlerError( + error: Error, + eventEnvelope: EventEnvelope | NotificationInterface, + eventHandlerMetadata: unknown, + eventInstance: EventInterface + ): Promise { // Do something with the error } } ``` -This method receives the error that was thrown and the event that was being handled when the error occurred. - ### Reducer errors These are the errors that are thrown in the `@Reduces` method of the `@Entity`. You can catch and return new errors in this function annotating a class with `@GlobalErrorHandler` and implementing the following method: @@ -62,12 +73,20 @@ These are the errors that are thrown in the `@Reduces` method of the `@Entity`. ```typescript @GlobalErrorHandler() export class MyErrorHandler { - public onReducerError(error: Error, entity: EntityInterface, snapshot: EntityInterface | null): Promise { + public static async onReducerError( + error: Error, + eventEnvelope: EventEnvelope, + reducerMetadata: ReducerMetadata, + eventInstance: EventInterface, + snapshotInstance: EntityInterface | null + ): Promise { // Do something with the error } } ``` +Note you can not ignore a Reducer error as the new entity could not be created + ### Event errors These are the errors that are thrown if the event doesn't exist. You can catch and return new errors in this function annotating a class with `@GlobalErrorHandler` and implementing the following method: @@ -90,14 +109,18 @@ These are the errors that are thrown in the `@Projects` method of the `@ReadMode ```typescript @GlobalErrorHandler() export class MyErrorHandler { - public onProjectionError(error: Error, readModel: ReadModelInterface, entity: EntityInterface): Promise { + public static async onProjectionError( + error: Error, + entityEnvelope: EntitySnapshotEnvelope, + projectionMetadata: ProjectionMetadata, + entity: EntityInterface, + readModel: ReadModelInterface | undefined + ): Promise { // Do something with the error } } ``` -This method receives the error that was thrown, the name of the read model, the ID of the read model, and the name of the projection. - ### All errors These are the errors that are thrown in any of the previous methods. You can catch and return new errors in this function annotating a class with `@GlobalErrorHandler` and implementing the following method: @@ -120,20 +143,35 @@ You can implement all error handling functions in the same class. Here is an exa ```typescript @GlobalErrorHandler() export class AppErrorHandler { - public static async onCommandHandlerError(error: Error, command: CommandEnvelope): Promise { + public static async onCommandHandlerError( + error: Error, + commandEnvelope: CommandEnvelope, + commandMetadata: CommandMetadata + ): Promise { return error } - public static async onScheduledCommandHandlerError(error: Error): Promise { + public static async onScheduledCommandHandlerError( + error: Error, + scheduledCommandEnvelope: ScheduledCommandEnvelope, + scheduledCommandMetadata: ScheduledCommandMetadata + ): Promise { return error } - public static async onDispatchEventHandlerError(error: Error, eventInstance: EventInterface): Promise { + public static async onDispatchEventHandlerError( + error: Error, + eventEnvelope: EventEnvelope | NotificationInterface, + eventHandlerMetadata: unknown, + eventInstance: EventInterface + ): Promise { return error } public static async onReducerError( error: Error, + eventEnvelope: EventEnvelope, + reducerMetadata: ReducerMetadata, eventInstance: EventInterface, snapshotInstance: EntityInterface | null ): Promise { @@ -142,6 +180,8 @@ export class AppErrorHandler { public static async onProjectionError( error: Error, + entityEnvelope: EntitySnapshotEnvelope, + projectionMetadata: ProjectionMetadata, entity: EntityInterface, readModel: ReadModelInterface | undefined ): Promise {