diff --git a/.github/workflows/npm-service.yml b/.github/workflows/npm-service.yml index 69a084fa..3afe2f43 100644 --- a/.github/workflows/npm-service.yml +++ b/.github/workflows/npm-service.yml @@ -89,7 +89,7 @@ jobs: message: | Published under `${{ env.DEV_CHANNEL }}` npm channel. ```sh - $ sf plugins install sf-git-merge-driver@${{ env.DEV_CHANNEL }} + $ sf plugins install sfdx-git-delta@${{ env.DEV_CHANNEL }} ``` comment-tag: dev-publish mode: recreate diff --git a/DESIGN.md b/DESIGN.md index 2242d471..5da0b2d6 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -81,6 +81,8 @@ flowchart LR | `inFolder` | Whether the type uses folder-based organization | | `content[]` | Sub-types sharing the same directory (Dashboard → DashboardFolder) | | `xmlTag` + `key` | In-file diff semantics for sub-element types | +| `adapter` | SDR `strategies.adapter` value (e.g. `bundle`, `mixedContent`, `digitalExperience`) — drives dynamic handler resolution | +| `decomposition` | SDR `strategies.decomposition` value (e.g. `folderPerType`) — used for child type handler heuristics | | `pruneOnly` | Type is only ever added to destructiveChanges, never package | | `excluded` | Sub-element type is not independently packageable | @@ -112,7 +114,7 @@ When `--ignore-whitespace` is enabled, `--word-diff-regex` and related flags are **Entry**: `DiffLineInterpreter.process(lines)` (`src/service/diffLineInterpreter.ts`) -Each diff line is dispatched to a type-specific handler via an async queue capped at `getConcurrencyThreshold()`. The `TypeHandlerFactory` selects the handler class based on the metadata type's `xmlName`. +Each diff line is dispatched to a type-specific handler via an async queue capped at `getConcurrencyThreshold()`. The `TypeHandlerFactory` selects the handler class using a multi-tier resolution chain that combines explicit overrides with dynamic resolution from SDR registry attributes. ### Dispatch Flow @@ -120,14 +122,42 @@ Each diff line is dispatched to a type-specific handler via an async queue cappe flowchart TD Line["Diff line
'A force-app/main/.../MyClass.cls'"] --> TF["TypeHandlerFactory"] TF --> ME["MetadataBoundaryResolver
creates MetadataElement"] - TF --> HM{"xmlName in
handlerMap?"} - HM -->|Yes| SH["Specialized Handler"] - HM -->|No| DH["StandardHandler"] - SH --> C["handler.collect()"] + TF --> T1{"xmlName in
handlerMap?"} + T1 -->|Yes| SH["Explicit Handler Override"] + T1 -->|No| T2{"inFolder?"} + T2 -->|Yes| IF["InFolderHandler"] + T2 -->|No| T3{"adapter in
adapterHandlerMap?"} + T3 -->|Yes| AH["Adapter-Based Handler"] + T3 -->|No| T4{"has parentXmlName?"} + T4 -->|Yes| CH["Child Type Heuristics"] + T4 -->|No| T5{"parent of
InFile children?"} + T5 -->|Yes| IFH["InFileHandler"] + T5 -->|No| DH["StandardHandler"] + CH --> C["handler.collect()"] + SH --> C + IF --> C + AH --> C + IFH --> C DH --> C C --> HR["HandlerResult
{manifests, copies, warnings}"] ``` +### Handler Resolution Tiers + +The `resolveHandler()` method applies these tiers in order, returning the first match: + +| Tier | Signal | Handler | Example | +|------|--------|---------|---------| +| 1. Explicit override | `xmlName` in `handlerMap` | Varies | `Flow` → `FlowHandler` | +| 2. Folder-based | `inFolder: true` | `InFolderHandler` | `Document`, `EmailTemplate` | +| 3. Adapter-based | `adapter` from SDR strategies | `InResourceHandler` / `InBundleHandler` | `bundle` → `InResource` | +| 4. Child heuristics | `xmlTag` + `key` + non-adapter parent | `DecomposedHandler` | `WorkflowAlert` | +| 4b. Child heuristics | no `xmlTag` + `folderPerType` parent | `CustomObjectChildHandler` | `ListView` | +| 5. InFile parent | has children with `xmlTag`+`key` | `InFileHandler` | `Workflow` | +| 6. Fallback | none of the above | `StandardHandler` | `ApexClass` | + +This design means most new SDR metadata types are handled automatically without code changes. Only types requiring specialized behavior need explicit overrides in `handlerMap`. + `MetadataBoundaryResolver` creates a `MetadataElement` — a value object capturing the parsed identity of the diff line: base path, extension, parent folder, component name, and path segments after the type directory. It may scan the git tree to find the component root when the directory name isn't present in the path. ### Handler Hierarchy @@ -201,7 +231,7 @@ Detects the format by file extension and routes accordingly. #### InFolderHandler **Extends**: StandardHandler -**Used by**: Document, EmailTemplate +**Used by**: Document, EmailTemplate (and any type with `inFolder: true` not explicitly overridden) Handles metadata stored in named folders. When a file changes, the handler also copies the folder's `-meta.xml` descriptor and any companion files sharing the same base name (e.g. thumbnails). Element names use the `Folder/MemberName` format. @@ -229,7 +259,7 @@ Extends shared folder behavior: changing any sub-file also forces inclusion of t #### InResourceHandler **Extends**: StandardHandler -**Used by**: ExperienceBundle, GenAiPlannerBundle, LightningTypeBundle, StaticResource, WaveTemplateBundle +**Used by**: ExperienceBundle, GenAiPlannerBundle, LightningTypeBundle, StaticResource, WaveTemplateBundle (and any type with `adapter: "bundle"` or `adapter: "mixedContent"` not explicitly overridden) Handles bundle-like resources where changing any file within the bundle triggers the entire bundle to be redeployed. On deletion, checks if the bundle root still has content — if yes, treats as modification instead of deletion (the bundle still exists with remaining files). @@ -257,7 +287,7 @@ Field translation files are not independently deployable. The handler produces a #### DecomposedHandler **Extends**: StandardHandler -**Used by**: SharingCriteriaRule, SharingGuestRule, SharingOwnerRule, Territory2, Territory2Rule, WorkflowAlert, WorkflowFieldUpdate, WorkflowFlowAction, WorkflowKnowledgePublish, WorkflowOutboundMessage, WorkflowRule, WorkflowSend, WorkflowTask +**Used by**: SharingCriteriaRule, SharingGuestRule, SharingOwnerRule, Territory2, Territory2Rule, WorkflowAlert, WorkflowFieldUpdate, WorkflowFlowAction, WorkflowKnowledgePublish, WorkflowOutboundMessage, WorkflowRule, WorkflowSend, WorkflowTask (and any child type with `xmlTag` + `key` whose parent has no adapter) Handles metadata stored as individual files in sub-folders of a parent type. Element names are qualified as `ParentName.ChildName`. On addition, also copies the parent type's `-meta.xml`. @@ -285,7 +315,7 @@ On addition, scans the object's `fields/` subfolder for Master Detail fields and #### CustomObjectChildHandler **Extends**: StandardHandler -**Used by**: BusinessProcess, CompactLayout, FieldSet, Index, ListView, RecordType, SharingReason, ValidationRule, WebLink +**Used by**: BusinessProcess, CompactLayout, FieldSet, Index, ListView, RecordType, SharingReason, ValidationRule, WebLink (and any child type without `xmlTag` whose parent has `decomposition: "folderPerType"`) Handles child types living in CustomObject sub-folders. Element names are qualified as `ObjectName.ChildName`. @@ -416,7 +446,7 @@ Logger.debug(lazy`result: ${() => JSON.stringify(largeObject)}`) | Extension point | How to extend | |-----------------|---------------| -| New metadata type handler | Add entry to `handlerMap` in `TypeHandlerFactory` mapping `xmlName → HandlerClass` | +| New metadata type handler | Most types are auto-resolved via SDR registry attributes (`adapter`, `decomposition`, `inFolder`, `xmlTag`+`key`). Only add an explicit entry to `handlerMap` in `TypeHandlerFactory` when a type needs behavior that differs from what SDR signals would select. | | New post-processor | Add a `BaseProcessor` subclass to `registeredProcessors` in `postProcessorManager.ts` | | Metadata type override | Add definition to `internalRegistry.ts` with special flags (`pruneOnly`, `excluded`, `xmlTag`, etc.) | | Programmatic API | `import sgd from 'sfdx-git-delta'` — call `await sgd(config)` directly, receiving the `Work` object | @@ -474,5 +504,7 @@ Metadata type definition (Zod-validated): | `inFolder` | `boolean` | Folder-based organization | | `content` | `Metadata[]` | Sub-types sharing the directory | | `xmlTag` + `key` | `string` | In-file diff semantics | +| `adapter` | `string` | SDR `strategies.adapter` — drives handler auto-resolution | +| `decomposition` | `string` | SDR `strategies.decomposition` — child type heuristics | | `pruneOnly` | `boolean` | Only in destructiveChanges | | `excluded` | `boolean` | Not independently packageable | diff --git a/__tests__/unit/lib/metadata/sdrMetadataAdapter.test.ts b/__tests__/unit/lib/metadata/sdrMetadataAdapter.test.ts index 9fda13fa..4068142d 100644 --- a/__tests__/unit/lib/metadata/sdrMetadataAdapter.test.ts +++ b/__tests__/unit/lib/metadata/sdrMetadataAdapter.test.ts @@ -69,6 +69,7 @@ describe('SDRMetadataAdapter', () => { // Assert const apexClass = metadata.find(m => m.xmlName === 'ApexClass') expect(apexClass).toEqual({ + adapter: 'default', directoryName: 'classes', inFolder: false, metaFile: false, @@ -77,6 +78,57 @@ describe('SDRMetadataAdapter', () => { }) }) + it('Given SDR type with strategies, When converting, Then stores adapter and decomposition', () => { + // Arrange + const mockRegistry: MockRegistry = { + types: { + customobject: { + id: 'customobject', + name: 'CustomObject', + directoryName: 'objects', + suffix: 'object', + strategies: { + adapter: 'decomposed', + decomposition: 'folderPerType', + transformer: 'decomposed', + }, + }, + }, + } + const adapter = new SDRMetadataAdapter(mockRegistry as never) + + // Act + const metadata = adapter.toInternalMetadata() + + // Assert + const sut = metadata.find(m => m.xmlName === 'CustomObject') + expect(sut?.adapter).toBe('decomposed') + expect(sut?.decomposition).toBe('folderPerType') + }) + + it('Given SDR type without strategies, When converting, Then adapter and decomposition are absent', () => { + // Arrange + const mockRegistry: MockRegistry = { + types: { + flow: { + id: 'flow', + name: 'Flow', + directoryName: 'flows', + suffix: 'flow', + }, + }, + } + const adapter = new SDRMetadataAdapter(mockRegistry as never) + + // Act + const metadata = adapter.toInternalMetadata() + + // Assert + const sut = metadata.find(m => m.xmlName === 'Flow') + expect(sut?.adapter).toBeUndefined() + expect(sut?.decomposition).toBeUndefined() + }) + it('Given SDR type with bundle adapter, When converting, Then metaFile is true', () => { // Arrange const mockRegistry: MockRegistry = { diff --git a/__tests__/unit/lib/service/typeHandlerFactory.test.ts b/__tests__/unit/lib/service/typeHandlerFactory.test.ts index a5f284da..8d1fb039 100644 --- a/__tests__/unit/lib/service/typeHandlerFactory.test.ts +++ b/__tests__/unit/lib/service/typeHandlerFactory.test.ts @@ -8,6 +8,8 @@ import CustomField from '../../../../src/service/customFieldHandler' import CustomObjectChildHandler from '../../../../src/service/customObjectChildHandler' import Decomposed from '../../../../src/service/decomposedHandler' import FlowHandler from '../../../../src/service/flowHandler' +import InBundleHandler from '../../../../src/service/inBundleHandler' +import InFileHandler from '../../../../src/service/inFileHandler' import InFolder from '../../../../src/service/inFolderHandler' import InResource from '../../../../src/service/inResourceHandler' import ReportingFolderHandler from '../../../../src/service/reportingFolderHandler' @@ -99,4 +101,68 @@ describe('the type handler factory', () => { await typeHandlerFactory.getTypeHandler(`Z ${line}`) ).toBeInstanceOf(Standard) }) + + it('Given deletion change type, When resolving handler, Then uses from revision', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `D force-app/main/default/classes/folder/file` + ) + expect(sut).toBeInstanceOf(Standard) + }) + + describe('dynamic resolution', () => { + describe('adapter-based resolution', () => { + it('Given bundle adapter type, When resolving handler, Then returns InResource', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `Z force-app/main/default/aiAuthoringBundles/MyBundle/file.txt` + ) + expect(sut).toBeInstanceOf(InResource) + }) + + it('Given mixedContent adapter type, When resolving handler, Then returns InResource', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `Z force-app/main/default/staticresources/MyResource/file.txt` + ) + expect(sut).toBeInstanceOf(InResource) + }) + + it('Given digitalExperience adapter type, When resolving handler, Then returns InBundle', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `Z force-app/main/default/digitalExperiences/site/home/file.json` + ) + expect(sut).toBeInstanceOf(InBundleHandler) + }) + }) + + describe('child type resolution', () => { + it('Given child with xmlTag and key of non-decomposed parent, When resolving handler, Then returns Decomposed', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `Z force-app/main/default/workflows/Account/workflowAlerts/MyAlert.workflowAlert-meta.xml` + ) + expect(sut).toBeInstanceOf(Decomposed) + }) + + it('Given child without xmlTag of folderPerType parent, When resolving handler, Then returns CustomObjectChildHandler', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `Z force-app/main/default/objects/Account/listViews/MyView.listView-meta.xml` + ) + expect(sut).toBeInstanceOf(CustomObjectChildHandler) + }) + + it('Given child with parentXmlName not matching any child heuristic, When resolving handler, Then returns Standard', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `Z force-app/main/default/workSkillRoutingAttributes/MyRouting/MyAttribute.workSkillRoutingAttribute-meta.xml` + ) + expect(sut).toBeInstanceOf(Standard) + }) + }) + + describe('InFile parent resolution', () => { + it('Given parent type with children having xmlTag, When resolving handler, Then returns InFile', async () => { + const sut = await typeHandlerFactory.getTypeHandler( + `Z force-app/main/default/workflows/Account.workflow-meta.xml` + ) + expect(sut).toBeInstanceOf(InFileHandler) + }) + }) + }) }) diff --git a/package-lock.json b/package-lock.json index 63717dc7..605b22b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,13 @@ "version": "6.32.4", "license": "MIT", "dependencies": { - "@oclif/core": "^4.8.1", + "@oclif/core": "^4.8.3", "@salesforce/core": "^8.26.3", "@salesforce/sf-plugins-core": "^12.2.6", "@salesforce/source-deploy-retrieve": "^12.31.14", "async": "^3.2.6", "fast-equals": "^6.0.0", - "fast-xml-parser": "^5.4.1", + "fast-xml-parser": "^5.4.2", "fs-extra": "^11.3.3", "ignore": "^7.0.5", "lodash-es": "^4.17.23", @@ -25,7 +25,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@biomejs/biome": "2.4.4", + "@biomejs/biome": "2.4.5", "@commitlint/cli": "^20.4.2", "@commitlint/config-conventional": "^20.4.2", "@jest/globals": "^30.2.0", @@ -34,8 +34,8 @@ "@salesforce/cli-plugins-testkit": "^5.3.41", "@salesforce/dev-config": "^4.3.2", "@salesforce/ts-sinon": "^1.4.31", - "@stryker-mutator/core": "^9.5.1", - "@stryker-mutator/jest-runner": "^9.5.1", + "@stryker-mutator/core": "^9.6.0", + "@stryker-mutator/jest-runner": "^9.6.0", "@types/async": "^3.2.25", "@types/chai": "^5.2.3", "@types/fs-extra": "^11.0.4", @@ -43,14 +43,14 @@ "@types/lodash": "^4.17.24", "@types/lodash-es": "^4.17.12", "@types/mocha": "^10.0.10", - "@types/node": "^25.3.2", + "@types/node": "^25.3.3", "benchmark": "^2.1.4", "chai": "^6.2.2", "husky": "^9.1.7", "jest": "^30.2.0", "jest-util": "^30.2.0", "knip": "^5.85.0", - "lint-staged": "^16.2.7", + "lint-staged": "^16.3.1", "lodash": "^4.17.23", "mocha": "^11.7.5", "nyc": "^18.0.0", @@ -304,52 +304,52 @@ } }, "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.997.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.997.0.tgz", - "integrity": "sha512-hfA4kVaWEqyff+l0l9rZg2vtvavec3wYV4SY27i3TJj/dIJC0FRe3M+6+QDJcleBqjd95YuszNRvMi9pzcy6+Q==", + "version": "3.1000.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.1000.0.tgz", + "integrity": "sha512-+//1gHKzap9g/jLmErpd64pPZIrM2M3jdQfQ8MXL5M0L44MKMdOhKSzN/fy0j6I4C0r4jQNEY3guSYN8dt6Utg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/credential-provider-node": "^3.972.12", - "@aws-sdk/middleware-host-header": "^3.972.4", - "@aws-sdk/middleware-logger": "^3.972.4", - "@aws-sdk/middleware-recursion-detection": "^3.972.4", - "@aws-sdk/middleware-user-agent": "^3.972.13", - "@aws-sdk/region-config-resolver": "^3.972.4", - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/util-endpoints": "^3.996.1", - "@aws-sdk/util-user-agent-browser": "^3.972.4", - "@aws-sdk/util-user-agent-node": "^3.972.12", - "@smithy/config-resolver": "^4.4.7", - "@smithy/core": "^3.23.4", - "@smithy/fetch-http-handler": "^5.3.10", - "@smithy/hash-node": "^4.2.9", - "@smithy/invalid-dependency": "^4.2.9", - "@smithy/middleware-content-length": "^4.2.9", - "@smithy/middleware-endpoint": "^4.4.18", - "@smithy/middleware-retry": "^4.4.35", - "@smithy/middleware-serde": "^4.2.10", - "@smithy/middleware-stack": "^4.2.9", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/node-http-handler": "^4.4.11", - "@smithy/protocol-http": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", - "@smithy/url-parser": "^4.2.9", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/credential-provider-node": "^3.972.14", + "@aws-sdk/middleware-host-header": "^3.972.6", + "@aws-sdk/middleware-logger": "^3.972.6", + "@aws-sdk/middleware-recursion-detection": "^3.972.6", + "@aws-sdk/middleware-user-agent": "^3.972.15", + "@aws-sdk/region-config-resolver": "^3.972.6", + "@aws-sdk/types": "^3.973.4", + "@aws-sdk/util-endpoints": "^3.996.3", + "@aws-sdk/util-user-agent-browser": "^3.972.6", + "@aws-sdk/util-user-agent-node": "^3.973.0", + "@smithy/config-resolver": "^4.4.9", + "@smithy/core": "^3.23.6", + "@smithy/fetch-http-handler": "^5.3.11", + "@smithy/hash-node": "^4.2.10", + "@smithy/invalid-dependency": "^4.2.10", + "@smithy/middleware-content-length": "^4.2.10", + "@smithy/middleware-endpoint": "^4.4.20", + "@smithy/middleware-retry": "^4.4.37", + "@smithy/middleware-serde": "^4.2.11", + "@smithy/middleware-stack": "^4.2.10", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/node-http-handler": "^4.4.12", + "@smithy/protocol-http": "^5.3.10", + "@smithy/smithy-client": "^4.12.0", + "@smithy/types": "^4.13.0", + "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.34", - "@smithy/util-defaults-mode-node": "^4.2.37", - "@smithy/util-endpoints": "^3.2.9", - "@smithy/util-middleware": "^4.2.9", - "@smithy/util-retry": "^4.2.9", - "@smithy/util-stream": "^4.5.14", + "@smithy/util-defaults-mode-browser": "^4.3.36", + "@smithy/util-defaults-mode-node": "^4.2.39", + "@smithy/util-endpoints": "^3.3.1", + "@smithy/util-middleware": "^4.2.10", + "@smithy/util-retry": "^4.2.10", + "@smithy/util-stream": "^4.5.15", "@smithy/util-utf8": "^4.2.1", - "@smithy/util-waiter": "^4.2.9", + "@smithy/util-waiter": "^4.2.10", "tslib": "^2.6.2" }, "engines": { @@ -357,66 +357,66 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.997.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.997.0.tgz", - "integrity": "sha512-a4z12iq/bJVJXfVOOKsYMDhxZwf+n8xieCuW+zI07qtRAuMiKr2vUtHPBbKncrF+hqnsq/Wmh48bu2yziGhIbg==", + "version": "3.1000.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1000.0.tgz", + "integrity": "sha512-7kPy33qNGq3NfwHC0412T6LDK1bp4+eiPzetX0sVd9cpTSXuQDKpoOFnB0Njj6uZjJDcLS3n2OeyarwwgkQ0Ow==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/credential-provider-node": "^3.972.12", - "@aws-sdk/middleware-bucket-endpoint": "^3.972.4", - "@aws-sdk/middleware-expect-continue": "^3.972.4", - "@aws-sdk/middleware-flexible-checksums": "^3.972.11", - "@aws-sdk/middleware-host-header": "^3.972.4", - "@aws-sdk/middleware-location-constraint": "^3.972.4", - "@aws-sdk/middleware-logger": "^3.972.4", - "@aws-sdk/middleware-recursion-detection": "^3.972.4", - "@aws-sdk/middleware-sdk-s3": "^3.972.13", - "@aws-sdk/middleware-ssec": "^3.972.4", - "@aws-sdk/middleware-user-agent": "^3.972.13", - "@aws-sdk/region-config-resolver": "^3.972.4", - "@aws-sdk/signature-v4-multi-region": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/util-endpoints": "^3.996.1", - "@aws-sdk/util-user-agent-browser": "^3.972.4", - "@aws-sdk/util-user-agent-node": "^3.972.12", - "@smithy/config-resolver": "^4.4.7", - "@smithy/core": "^3.23.4", - "@smithy/eventstream-serde-browser": "^4.2.9", - "@smithy/eventstream-serde-config-resolver": "^4.3.9", - "@smithy/eventstream-serde-node": "^4.2.9", - "@smithy/fetch-http-handler": "^5.3.10", - "@smithy/hash-blob-browser": "^4.2.10", - "@smithy/hash-node": "^4.2.9", - "@smithy/hash-stream-node": "^4.2.9", - "@smithy/invalid-dependency": "^4.2.9", - "@smithy/md5-js": "^4.2.9", - "@smithy/middleware-content-length": "^4.2.9", - "@smithy/middleware-endpoint": "^4.4.18", - "@smithy/middleware-retry": "^4.4.35", - "@smithy/middleware-serde": "^4.2.10", - "@smithy/middleware-stack": "^4.2.9", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/node-http-handler": "^4.4.11", - "@smithy/protocol-http": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", - "@smithy/url-parser": "^4.2.9", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/credential-provider-node": "^3.972.14", + "@aws-sdk/middleware-bucket-endpoint": "^3.972.6", + "@aws-sdk/middleware-expect-continue": "^3.972.6", + "@aws-sdk/middleware-flexible-checksums": "^3.973.1", + "@aws-sdk/middleware-host-header": "^3.972.6", + "@aws-sdk/middleware-location-constraint": "^3.972.6", + "@aws-sdk/middleware-logger": "^3.972.6", + "@aws-sdk/middleware-recursion-detection": "^3.972.6", + "@aws-sdk/middleware-sdk-s3": "^3.972.15", + "@aws-sdk/middleware-ssec": "^3.972.6", + "@aws-sdk/middleware-user-agent": "^3.972.15", + "@aws-sdk/region-config-resolver": "^3.972.6", + "@aws-sdk/signature-v4-multi-region": "^3.996.3", + "@aws-sdk/types": "^3.973.4", + "@aws-sdk/util-endpoints": "^3.996.3", + "@aws-sdk/util-user-agent-browser": "^3.972.6", + "@aws-sdk/util-user-agent-node": "^3.973.0", + "@smithy/config-resolver": "^4.4.9", + "@smithy/core": "^3.23.6", + "@smithy/eventstream-serde-browser": "^4.2.10", + "@smithy/eventstream-serde-config-resolver": "^4.3.10", + "@smithy/eventstream-serde-node": "^4.2.10", + "@smithy/fetch-http-handler": "^5.3.11", + "@smithy/hash-blob-browser": "^4.2.11", + "@smithy/hash-node": "^4.2.10", + "@smithy/hash-stream-node": "^4.2.10", + "@smithy/invalid-dependency": "^4.2.10", + "@smithy/md5-js": "^4.2.10", + "@smithy/middleware-content-length": "^4.2.10", + "@smithy/middleware-endpoint": "^4.4.20", + "@smithy/middleware-retry": "^4.4.37", + "@smithy/middleware-serde": "^4.2.11", + "@smithy/middleware-stack": "^4.2.10", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/node-http-handler": "^4.4.12", + "@smithy/protocol-http": "^5.3.10", + "@smithy/smithy-client": "^4.12.0", + "@smithy/types": "^4.13.0", + "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.34", - "@smithy/util-defaults-mode-node": "^4.2.37", - "@smithy/util-endpoints": "^3.2.9", - "@smithy/util-middleware": "^4.2.9", - "@smithy/util-retry": "^4.2.9", - "@smithy/util-stream": "^4.5.14", + "@smithy/util-defaults-mode-browser": "^4.3.36", + "@smithy/util-defaults-mode-node": "^4.2.39", + "@smithy/util-endpoints": "^3.3.1", + "@smithy/util-middleware": "^4.2.10", + "@smithy/util-retry": "^4.2.10", + "@smithy/util-stream": "^4.5.15", "@smithy/util-utf8": "^4.2.1", - "@smithy/util-waiter": "^4.2.9", + "@smithy/util-waiter": "^4.2.10", "tslib": "^2.6.2" }, "engines": { @@ -424,23 +424,23 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.973.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.13.tgz", - "integrity": "sha512-eCFiLyBhJR7c/i8hZOETdzj2wsLFzi2L/w9/jajOgwmGqO8xrUExqkTZqdjROkwU62owqeqSuw4sIzlCv1E/ww==", + "version": "3.973.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.15.tgz", + "integrity": "sha512-AlC0oQ1/mdJ8vCIqu524j5RB7M8i8E24bbkZmya1CuiQxkY7SdIZAyw7NDNMGaNINQFq/8oGRMX0HeOfCVsl/A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/xml-builder": "^3.972.6", - "@smithy/core": "^3.23.4", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/property-provider": "^4.2.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/signature-v4": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@aws-sdk/xml-builder": "^3.972.8", + "@smithy/core": "^3.23.6", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/property-provider": "^4.2.10", + "@smithy/protocol-http": "^5.3.10", + "@smithy/signature-v4": "^5.3.10", + "@smithy/smithy-client": "^4.12.0", + "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.1", - "@smithy/util-middleware": "^4.2.9", + "@smithy/util-middleware": "^4.2.10", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" }, @@ -449,13 +449,13 @@ } }, "node_modules/@aws-sdk/crc64-nvme": { - "version": "3.972.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.1.tgz", - "integrity": "sha512-CmT9RrQol36hUdvp4dk+BRV47JBRIE+I46yAOKyb/SoMH7mKOBwk6jUpFZhF8B+LCnWnefnM6jT/WsfQ5M1kCQ==", + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.3.tgz", + "integrity": "sha512-UExeK+EFiq5LAcbHm96CQLSia+5pvpUVSAsVApscBzayb7/6dJBJKwV4/onsk4VbWSmqxDMcfuTD+pC4RxgZHg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.1", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -463,16 +463,16 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.11.tgz", - "integrity": "sha512-hbyoFuVm3qOAGfIPS9t7jCs8GFLFoaOs8ZmYp/chqciuHDyEGv+J365ip7YSvXSrxxUbeW9NyB1hTLt40NBMRg==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.13.tgz", + "integrity": "sha512-6ljXKIQ22WFKyIs1jbORIkGanySBHaPPTOI4OxACP5WXgbcR0nDYfqNJfXEGwCK7IzHdNbCSFsNKKs0qCexR8Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/types": "^3.973.4", + "@smithy/property-provider": "^4.2.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -480,21 +480,21 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.13.tgz", - "integrity": "sha512-a864QxQWFkdCZ5wQF0QZNKTbqAc/DFQNeARp4gOyZZdql5RHjj4CppUSfwAzS9cpw2IPY3eeJjWqLZ1QiDB/6w==", + "version": "3.972.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.15.tgz", + "integrity": "sha512-dJuSTreu/T8f24SHDNTjd7eQ4rabr0TzPh2UTCwYexQtzG3nTDKm1e5eIdhiroTMDkPEJeY+WPkA6F9wod/20A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/fetch-http-handler": "^5.3.10", - "@smithy/node-http-handler": "^4.4.11", - "@smithy/property-provider": "^4.2.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", - "@smithy/util-stream": "^4.5.14", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/types": "^3.973.4", + "@smithy/fetch-http-handler": "^5.3.11", + "@smithy/node-http-handler": "^4.4.12", + "@smithy/property-provider": "^4.2.10", + "@smithy/protocol-http": "^5.3.10", + "@smithy/smithy-client": "^4.12.0", + "@smithy/types": "^4.13.0", + "@smithy/util-stream": "^4.5.15", "tslib": "^2.6.2" }, "engines": { @@ -502,25 +502,25 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.11.tgz", - "integrity": "sha512-kvPFn626ABLzxmjFMoqMRtmFKMeiUdWPhwxhmuPu233tqHnNuXzHv0MtrZlkzHd+rwlh9j0zCbQo89B54wIazQ==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.13.tgz", + "integrity": "sha512-JKSoGb7XeabZLBJptpqoZIFbROUIS65NuQnEHGOpuT9GuuZwag2qciKANiDLFiYk4u8nSrJC9JIOnWKVvPVjeA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/credential-provider-env": "^3.972.11", - "@aws-sdk/credential-provider-http": "^3.972.13", - "@aws-sdk/credential-provider-login": "^3.972.11", - "@aws-sdk/credential-provider-process": "^3.972.11", - "@aws-sdk/credential-provider-sso": "^3.972.11", - "@aws-sdk/credential-provider-web-identity": "^3.972.11", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/credential-provider-imds": "^4.2.9", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/credential-provider-env": "^3.972.13", + "@aws-sdk/credential-provider-http": "^3.972.15", + "@aws-sdk/credential-provider-login": "^3.972.13", + "@aws-sdk/credential-provider-process": "^3.972.13", + "@aws-sdk/credential-provider-sso": "^3.972.13", + "@aws-sdk/credential-provider-web-identity": "^3.972.13", + "@aws-sdk/nested-clients": "^3.996.3", + "@aws-sdk/types": "^3.973.4", + "@smithy/credential-provider-imds": "^4.2.10", + "@smithy/property-provider": "^4.2.10", + "@smithy/shared-ini-file-loader": "^4.4.5", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -528,19 +528,19 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.11.tgz", - "integrity": "sha512-stdy09EpBTmsxGiXe1vB5qtXNww9wact36/uWLlSV0/vWbCOUAY2JjhPXoDVLk8n+E6r0M5HeZseLk+iTtifxg==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.13.tgz", + "integrity": "sha512-RtYcrxdnJHKY8MFQGLltCURcjuMjnaQpAxPE6+/QEdDHHItMKZgabRe/KScX737F9vJMQsmJy9EmMOkCnoC1JQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/nested-clients": "^3.996.3", + "@aws-sdk/types": "^3.973.4", + "@smithy/property-provider": "^4.2.10", + "@smithy/protocol-http": "^5.3.10", + "@smithy/shared-ini-file-loader": "^4.4.5", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -548,23 +548,23 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.12", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.12.tgz", - "integrity": "sha512-gMWGnHbNSKWRj+PAiuSg0EDpEwpyIgk0v9U6EuZ1C/5/BUv25Way+E+UFB7r+YYkscuBJMJ+ai8E2K0Q8dx50g==", + "version": "3.972.14", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.14.tgz", + "integrity": "sha512-WqoC2aliIjQM/L3oFf6j+op/enT2i9Cc4UTxxMEKrJNECkq4/PlKE5BOjSYFcq6G9mz65EFbXJh7zOU4CvjSKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.11", - "@aws-sdk/credential-provider-http": "^3.972.13", - "@aws-sdk/credential-provider-ini": "^3.972.11", - "@aws-sdk/credential-provider-process": "^3.972.11", - "@aws-sdk/credential-provider-sso": "^3.972.11", - "@aws-sdk/credential-provider-web-identity": "^3.972.11", - "@aws-sdk/types": "^3.973.2", - "@smithy/credential-provider-imds": "^4.2.9", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", + "@aws-sdk/credential-provider-env": "^3.972.13", + "@aws-sdk/credential-provider-http": "^3.972.15", + "@aws-sdk/credential-provider-ini": "^3.972.13", + "@aws-sdk/credential-provider-process": "^3.972.13", + "@aws-sdk/credential-provider-sso": "^3.972.13", + "@aws-sdk/credential-provider-web-identity": "^3.972.13", + "@aws-sdk/types": "^3.973.4", + "@smithy/credential-provider-imds": "^4.2.10", + "@smithy/property-provider": "^4.2.10", + "@smithy/shared-ini-file-loader": "^4.4.5", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -572,17 +572,17 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.11.tgz", - "integrity": "sha512-B049fvbv41vf0Fs5bCtbzHpruBDp61sPiFDxUmkAJ/zvgSAturpj2rqzV1rj2clg4mb44Uxp9rgpcODexNFlFA==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.13.tgz", + "integrity": "sha512-rsRG0LQA4VR+jnDyuqtXi2CePYSmfm5GNL9KxiW8DSe25YwJSr06W8TdUfONAC+rjsTI+aIH2rBGG5FjMeANrw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/types": "^3.973.4", + "@smithy/property-provider": "^4.2.10", + "@smithy/shared-ini-file-loader": "^4.4.5", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -590,19 +590,19 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.11.tgz", - "integrity": "sha512-vX9z8skN8vPtamVWmSCm4KQohub+1uMuRzIo4urZ2ZUMBAl1bqHatVD/roCb3qRfAyIGvZXCA/AWS03BQRMyCQ==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.13.tgz", + "integrity": "sha512-fr0UU1wx8kNHDhTQBXioc/YviSW8iXuAxHvnH7eQUtn8F8o/FU3uu6EUMvAQgyvn7Ne5QFnC0Cj0BFlwCk+RFw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/token-providers": "3.997.0", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/nested-clients": "^3.996.3", + "@aws-sdk/token-providers": "3.999.0", + "@aws-sdk/types": "^3.973.4", + "@smithy/property-provider": "^4.2.10", + "@smithy/shared-ini-file-loader": "^4.4.5", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -610,18 +610,18 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.11.tgz", - "integrity": "sha512-VR2Ju/QBdOjnWNIYuxRml63eFDLGc6Zl8aDwLi1rzgWo3rLBgtaWhWVBAijhVXzyPdQIOqdL8hvll5ybqumjeQ==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.13.tgz", + "integrity": "sha512-a6iFMh1pgUH0TdcouBppLJUfPM7Yd3R9S1xFodPtCRoLqCz2RQFA3qjA8x4112PVYXEd4/pHX2eihapq39w0rA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/nested-clients": "^3.996.3", + "@aws-sdk/types": "^3.973.4", + "@smithy/property-provider": "^4.2.10", + "@smithy/shared-ini-file-loader": "^4.4.5", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -629,17 +629,17 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.4.tgz", - "integrity": "sha512-4W+1SPx5eWetSurqk7WNnldNr++k4UYcP2XmPnCf8yLFdUZ4NKKJA3j+zVuWmhOu7xKmEAyo9j3f+cy22CEVKg==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.6.tgz", + "integrity": "sha512-3H2bhvb7Cb/S6WFsBy/Dy9q2aegC9JmGH1inO8Lb2sWirSqpLJlZmvQHPE29h2tIxzv6el/14X/tLCQ8BQU6ZQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", + "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-arn-parser": "^3.972.2", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/protocol-http": "^5.3.10", + "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", "tslib": "^2.6.2" }, @@ -648,15 +648,15 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.4.tgz", - "integrity": "sha512-lxU2ieIWtK9nqWxA+W4ldev31tRPjkkdt+QDBWGiwUNJsNwSJFVhkuIV9cbBPxTCT0nmYyJwvJ/2TYYJLMwmMA==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.6.tgz", + "integrity": "sha512-QMdffpU+GkSGC+bz6WdqlclqIeCsOfgX8JFZ5xvwDtX+UTj4mIXm3uXu7Ko6dBseRcJz1FA6T9OmlAAY6JgJUg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@smithy/protocol-http": "^5.3.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -664,24 +664,24 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.972.11.tgz", - "integrity": "sha512-niA/vhtS/xR4hEHIsPLEvgsccpqve+uJ4Gtizctsa21HfHmIZi5bWJD8kPcN+SfAgrlnuBG2YKFX0rRbzylg7A==", + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.973.1.tgz", + "integrity": "sha512-QLXsxsI6VW8LuGK+/yx699wzqP/NMCGk/hSGP+qtB+Lcff+23UlbahyouLlk+nfT7Iu021SkXBhnAuVd6IZcPw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/crc64-nvme": "^3.972.1", - "@aws-sdk/types": "^3.973.2", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/crc64-nvme": "^3.972.3", + "@aws-sdk/types": "^3.973.4", "@smithy/is-array-buffer": "^4.2.1", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", - "@smithy/util-middleware": "^4.2.9", - "@smithy/util-stream": "^4.5.14", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/protocol-http": "^5.3.10", + "@smithy/types": "^4.13.0", + "@smithy/util-middleware": "^4.2.10", + "@smithy/util-stream": "^4.5.15", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" }, @@ -690,15 +690,15 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.4.tgz", - "integrity": "sha512-4q2Vg7/zOB10huDBLjzzTwVjBpG22X3J3ief2XrJEgTaANZrNfA3/cGbCVNAibSbu/nIYA7tDk8WCdsIzDDc4Q==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.6.tgz", + "integrity": "sha512-5XHwjPH1lHB+1q4bfC7T8Z5zZrZXfaLcjSMwTd1HPSPrCmPFMbg3UQ5vgNWcVj0xoX4HWqTGkSf2byrjlnRg5w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@smithy/protocol-http": "^5.3.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -706,14 +706,14 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.4.tgz", - "integrity": "sha512-EP1qs0JV2smcKhZpwDMuzMBx9Q5qyU/RuZ02/qh/yBA3jnZKuNhB1lsQKkicvXg7LOeoqyxXLKOP/PJOugX8yg==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.6.tgz", + "integrity": "sha512-XdZ2TLwyj3Am6kvUc67vquQvs6+D8npXvXgyEUJAdkUDx5oMFJKOqpK+UpJhVDsEL068WAJl2NEGzbSik7dGJQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -721,14 +721,14 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.4.tgz", - "integrity": "sha512-xFqPvTysuZAHSkdygT+ken/5rzkR7fhOoDPejAJQslZpp0XBepmCJnDOqA57ERtCTBpu8wpjTFI1ETd4S0AXEw==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.6.tgz", + "integrity": "sha512-iFnaMFMQdljAPrvsCVKYltPt2j40LQqukAbXvW7v0aL5I+1GO7bZ/W8m12WxW3gwyK5p5u1WlHg8TSAizC5cZw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -736,16 +736,16 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.4.tgz", - "integrity": "sha512-tVbRaayUZ7y2bOb02hC3oEPTqQf2A0HpPDwdMl1qTmye/q8Mq1F1WiIoFkQwG/YQFvbyErYIDMbYzIlxzzLtjQ==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.6.tgz", + "integrity": "sha512-dY4v3of5EEMvik6+UDwQ96KfUFDk8m1oZDdkSc5lwi4o7rFrjnv0A+yTV+gu230iybQZnKgDLg/rt2P3H+Vscw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", + "@aws-sdk/types": "^3.973.4", "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", + "@smithy/protocol-http": "^5.3.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -753,24 +753,24 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.13.tgz", - "integrity": "sha512-rGBz1n6PFxg1+5mnN1/IczesPwx0W39DZt2JPjqPiZAZ7LAqH8FS4AsawSNZqr+UFJfqtTXYpeLQnMfbMAgHhg==", + "version": "3.972.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.15.tgz", + "integrity": "sha512-WDLgssevOU5BFx1s8jA7jj6cE5HuImz28sy9jKOaVtz0AW1lYqSzotzdyiybFaBcQTs5zxXOb2pUfyMxgEKY3Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/types": "^3.973.4", "@aws-sdk/util-arn-parser": "^3.972.2", - "@smithy/core": "^3.23.4", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/signature-v4": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", + "@smithy/core": "^3.23.6", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/protocol-http": "^5.3.10", + "@smithy/signature-v4": "^5.3.10", + "@smithy/smithy-client": "^4.12.0", + "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.1", - "@smithy/util-middleware": "^4.2.9", - "@smithy/util-stream": "^4.5.14", + "@smithy/util-middleware": "^4.2.10", + "@smithy/util-stream": "^4.5.15", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" }, @@ -779,14 +779,14 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.4.tgz", - "integrity": "sha512-jzysKNnfwqjTOeF4s1QcxYQ8WB1ZIw/KMhOAX2UGYsmpVPHZ1cV6IYRfBQnt0qnDYom1pU3b5jOG8TA9n6LAbQ==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.6.tgz", + "integrity": "sha512-acvMUX9jF4I2Ew+Z/EA6gfaFaz9ehci5wxBmXCZeulLuv8m+iGf6pY9uKz8TPjg39bdAz3hxoE0eLP8Qz+IYlA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -794,18 +794,18 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.13.tgz", - "integrity": "sha512-p1kVYbzBxRmhuOHoL/ANJPCedqUxnVgkEjxPoxt5pQv/yzppHM7aBWciYEE9TZY59M421D3GjLfZIZBoEFboVQ==", + "version": "3.972.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.15.tgz", + "integrity": "sha512-ABlFVcIMmuRAwBT+8q5abAxOr7WmaINirDJBnqGY5b5jSDo00UMlg/G4a0xoAgwm6oAECeJcwkvDlxDwKf58fQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/util-endpoints": "^3.996.1", - "@smithy/core": "^3.23.4", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/types": "^3.973.4", + "@aws-sdk/util-endpoints": "^3.996.3", + "@smithy/core": "^3.23.6", + "@smithy/protocol-http": "^5.3.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -813,48 +813,48 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.996.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.1.tgz", - "integrity": "sha512-XHVLFRGkuV2gh2uwBahCt65ALMb5wMpqplXEZIvFnWOCPlk60B7h7M5J9Em243K8iICDiWY6KhBEqVGfjTqlLA==", + "version": "3.996.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.3.tgz", + "integrity": "sha512-AU5TY1V29xqwg/MxmA2odwysTez+ccFAhmfRJk+QZT5HNv90UTA9qKd1J9THlsQkvmH7HWTEV1lDNxkQO5PzNw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/middleware-host-header": "^3.972.4", - "@aws-sdk/middleware-logger": "^3.972.4", - "@aws-sdk/middleware-recursion-detection": "^3.972.4", - "@aws-sdk/middleware-user-agent": "^3.972.13", - "@aws-sdk/region-config-resolver": "^3.972.4", - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/util-endpoints": "^3.996.1", - "@aws-sdk/util-user-agent-browser": "^3.972.4", - "@aws-sdk/util-user-agent-node": "^3.972.12", - "@smithy/config-resolver": "^4.4.7", - "@smithy/core": "^3.23.4", - "@smithy/fetch-http-handler": "^5.3.10", - "@smithy/hash-node": "^4.2.9", - "@smithy/invalid-dependency": "^4.2.9", - "@smithy/middleware-content-length": "^4.2.9", - "@smithy/middleware-endpoint": "^4.4.18", - "@smithy/middleware-retry": "^4.4.35", - "@smithy/middleware-serde": "^4.2.10", - "@smithy/middleware-stack": "^4.2.9", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/node-http-handler": "^4.4.11", - "@smithy/protocol-http": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", - "@smithy/url-parser": "^4.2.9", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/middleware-host-header": "^3.972.6", + "@aws-sdk/middleware-logger": "^3.972.6", + "@aws-sdk/middleware-recursion-detection": "^3.972.6", + "@aws-sdk/middleware-user-agent": "^3.972.15", + "@aws-sdk/region-config-resolver": "^3.972.6", + "@aws-sdk/types": "^3.973.4", + "@aws-sdk/util-endpoints": "^3.996.3", + "@aws-sdk/util-user-agent-browser": "^3.972.6", + "@aws-sdk/util-user-agent-node": "^3.973.0", + "@smithy/config-resolver": "^4.4.9", + "@smithy/core": "^3.23.6", + "@smithy/fetch-http-handler": "^5.3.11", + "@smithy/hash-node": "^4.2.10", + "@smithy/invalid-dependency": "^4.2.10", + "@smithy/middleware-content-length": "^4.2.10", + "@smithy/middleware-endpoint": "^4.4.20", + "@smithy/middleware-retry": "^4.4.37", + "@smithy/middleware-serde": "^4.2.11", + "@smithy/middleware-stack": "^4.2.10", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/node-http-handler": "^4.4.12", + "@smithy/protocol-http": "^5.3.10", + "@smithy/smithy-client": "^4.12.0", + "@smithy/types": "^4.13.0", + "@smithy/url-parser": "^4.2.10", "@smithy/util-base64": "^4.3.1", "@smithy/util-body-length-browser": "^4.2.1", "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.34", - "@smithy/util-defaults-mode-node": "^4.2.37", - "@smithy/util-endpoints": "^3.2.9", - "@smithy/util-middleware": "^4.2.9", - "@smithy/util-retry": "^4.2.9", + "@smithy/util-defaults-mode-browser": "^4.3.36", + "@smithy/util-defaults-mode-node": "^4.2.39", + "@smithy/util-endpoints": "^3.3.1", + "@smithy/util-middleware": "^4.2.10", + "@smithy/util-retry": "^4.2.10", "@smithy/util-utf8": "^4.2.1", "tslib": "^2.6.2" }, @@ -863,16 +863,16 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.4.tgz", - "integrity": "sha512-3GrJYv5eI65oCKveBZP7Q246dVP+tqeys9aKMB0dfX1glUWfppWlxIu52derqdNb9BX9lxYmeiaBcBIqOAYSgQ==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.6.tgz", + "integrity": "sha512-Aa5PusHLXAqLTX1UKDvI3pHQJtIsF7Q+3turCHqfz/1F61/zDMWfbTC8evjhrrYVAtz9Vsv3SJ/waSUeu7B6gw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/config-resolver": "^4.4.7", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@smithy/config-resolver": "^4.4.9", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -880,17 +880,17 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.1.tgz", - "integrity": "sha512-Mj4npuEtVHFjGZHTBwhBvBzmgKHY7UsfroZWWzjpVP5YJaMTPeihsotuQLba5uQthEZyaeWs6dTu3Shr0qKFFw==", + "version": "3.996.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.3.tgz", + "integrity": "sha512-gQYI/Buwp0CAGQxY7mR5VzkP56rkWq2Y1ROkFuXh5XY94DsSjJw62B3I0N0lysQmtwiL2ht2KHI9NylM/RP4FA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/protocol-http": "^5.3.9", - "@smithy/signature-v4": "^5.3.9", - "@smithy/types": "^4.12.1", + "@aws-sdk/middleware-sdk-s3": "^3.972.15", + "@aws-sdk/types": "^3.973.4", + "@smithy/protocol-http": "^5.3.10", + "@smithy/signature-v4": "^5.3.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -898,18 +898,18 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.997.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.997.0.tgz", - "integrity": "sha512-UdG36F7lU9aTqGFRieEyuRUJlgEJBqKeKKekC0esH21DbUSKhPR1kZBah214kYasIaWe1hLJLaqUigoTa5hZAQ==", + "version": "3.999.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.999.0.tgz", + "integrity": "sha512-cx0hHUlgXULfykx4rdu/ciNAJaa3AL5xz3rieCz7NKJ68MJwlj3664Y8WR5MGgxfyYJBdamnkjNSx5Kekuc0cg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", + "@aws-sdk/core": "^3.973.15", + "@aws-sdk/nested-clients": "^3.996.3", + "@aws-sdk/types": "^3.973.4", + "@smithy/property-provider": "^4.2.10", + "@smithy/shared-ini-file-loader": "^4.4.5", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -917,13 +917,13 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.973.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.2.tgz", - "integrity": "sha512-maTZwGsALtnAw4TJr/S6yERAosTwPduu0XhUV+SdbvRZtCOgSgk1ttL2R0XYzvkYSpvbtJocn77tBXq2AKglBw==", + "version": "3.973.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.4.tgz", + "integrity": "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.1", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -944,16 +944,16 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.996.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.1.tgz", - "integrity": "sha512-7cJyd+M5i0IoqWkJa1KFx8KNCGIx+Ywu+lT53KpqX7ReVwz03DCKUqvZ/y65vdKwo9w9/HptSAeLDluO5MpGIg==", + "version": "3.996.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.3.tgz", + "integrity": "sha512-yWIQSNiCjykLL+ezN5A+DfBb1gfXTytBxm57e64lYmwxDHNmInYHRJYYRAGWG1o77vKEiWaw4ui28e3yb1k5aQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", - "@smithy/url-parser": "^4.2.9", - "@smithy/util-endpoints": "^3.2.9", + "@aws-sdk/types": "^3.973.4", + "@smithy/types": "^4.13.0", + "@smithy/url-parser": "^4.2.10", + "@smithy/util-endpoints": "^3.3.1", "tslib": "^2.6.2" }, "engines": { @@ -974,29 +974,29 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.4.tgz", - "integrity": "sha512-GHb+8XHv6hfLWKQKAKaSOm+vRvogg07s+FWtbR3+eCXXPSFn9XVmiYF4oypAxH7dGIvoxkVG/buHEnzYukyJiA==", + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.6.tgz", + "integrity": "sha512-Fwr/llD6GOrFgQnKaI2glhohdGuBDfHfora6iG9qsBBBR8xv1SdCSwbtf5CWlUdCw5X7g76G/9Hf0Inh0EmoxA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", + "@aws-sdk/types": "^3.973.4", + "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.972.12", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.12.tgz", - "integrity": "sha512-c1n3wBK6te+Vd9qU86nF8AsYuiBsxLn0AADGWyFX7vEADr3btaAg5iPQT6GYj6rvzSOEVVisvaAatOWInlJUbQ==", + "version": "3.973.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.0.tgz", + "integrity": "sha512-A9J2G4Nf236e9GpaC1JnA8wRn6u6GjnOXiTwBLA6NUJhlBTIGfrTy+K1IazmF8y+4OFdW3O5TZlhyspJMqiqjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/types": "^4.12.1", + "@aws-sdk/middleware-user-agent": "^3.972.15", + "@aws-sdk/types": "^3.973.4", + "@smithy/node-config-provider": "^4.3.10", + "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "engines": { @@ -1012,13 +1012,13 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.6.tgz", - "integrity": "sha512-YrXu+UnfC8IdARa4ZkrpcyuRmA/TVgYW6Lcdtvi34NQgRjM1hTirNirN+rGb+s/kNomby8oJiIAu0KNbiZC7PA==", + "version": "3.972.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.8.tgz", + "integrity": "sha512-Ql8elcUdYCha83Ol7NznBsgN5GVZnv3vUd86fEc6waU6oUdY0T1O9NODkEEOS/Uaogr87avDrUC6DSeM4oXjZg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.1", + "@smithy/types": "^4.13.0", "fast-xml-parser": "5.3.6", "tslib": "^2.6.2" }, @@ -1071,9 +1071,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", - "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -1081,21 +1081,21 @@ } }, "node_modules/@babel/core": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", - "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.4", - "@babel/types": "^7.28.4", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -1122,14 +1122,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -1152,13 +1152,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -1352,27 +1352,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1382,9 +1382,9 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.6.tgz", - "integrity": "sha512-RVdFPPyY9fCRAX68haPmOk2iyKW8PKJFthmm8NeSI3paNxKWGZIn99+VbIf0FrtCpFnPgnpF/L48tadi617ULg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.0.tgz", + "integrity": "sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==", "dev": true, "license": "MIT", "dependencies": { @@ -1760,22 +1760,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/template/node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/traverse": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", @@ -1795,39 +1779,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.0.tgz", - "integrity": "sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/types": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", @@ -1850,9 +1801,9 @@ "license": "MIT" }, "node_modules/@biomejs/biome": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.4.tgz", - "integrity": "sha512-tigwWS5KfJf0cABVd52NVaXyAVv4qpUXOWJ1rxFL8xF1RVoeS2q/LK+FHgYoKMclJCuRoCWAPy1IXaN9/mS61Q==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.5.tgz", + "integrity": "sha512-OWNCyMS0Q011R6YifXNOg6qsOg64IVc7XX6SqGsrGszPbkVCoaO7Sr/lISFnXZ9hjQhDewwZ40789QmrG0GYgQ==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -1866,20 +1817,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.4.4", - "@biomejs/cli-darwin-x64": "2.4.4", - "@biomejs/cli-linux-arm64": "2.4.4", - "@biomejs/cli-linux-arm64-musl": "2.4.4", - "@biomejs/cli-linux-x64": "2.4.4", - "@biomejs/cli-linux-x64-musl": "2.4.4", - "@biomejs/cli-win32-arm64": "2.4.4", - "@biomejs/cli-win32-x64": "2.4.4" + "@biomejs/cli-darwin-arm64": "2.4.5", + "@biomejs/cli-darwin-x64": "2.4.5", + "@biomejs/cli-linux-arm64": "2.4.5", + "@biomejs/cli-linux-arm64-musl": "2.4.5", + "@biomejs/cli-linux-x64": "2.4.5", + "@biomejs/cli-linux-x64-musl": "2.4.5", + "@biomejs/cli-win32-arm64": "2.4.5", + "@biomejs/cli-win32-x64": "2.4.5" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.4.tgz", - "integrity": "sha512-jZ+Xc6qvD6tTH5jM6eKX44dcbyNqJHssfl2nnwT6vma6B1sj7ZLTGIk6N5QwVBs5xGN52r3trk5fgd3sQ9We9A==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.5.tgz", + "integrity": "sha512-lGS4Nd5O3KQJ6TeWv10mElnx1phERhBxqGP/IKq0SvZl78kcWDFMaTtVK+w3v3lusRFxJY78n07PbKplirsU5g==", "cpu": [ "arm64" ], @@ -1894,9 +1845,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.4.tgz", - "integrity": "sha512-Dh1a/+W+SUCXhEdL7TiX3ArPTFCQKJTI1mGncZNWfO+6suk+gYA4lNyJcBB+pwvF49uw0pEbUS49BgYOY4hzUg==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.5.tgz", + "integrity": "sha512-6MoH4tyISIBNkZ2Q5T1R7dLd5BsITb2yhhhrU9jHZxnNSNMWl+s2Mxu7NBF8Y3a7JJcqq9nsk8i637z4gqkJxQ==", "cpu": [ "x64" ], @@ -1911,13 +1862,16 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.4.tgz", - "integrity": "sha512-V/NFfbWhsUU6w+m5WYbBenlEAz8eYnSqRMDMAW3K+3v0tYVkNyZn8VU0XPxk/lOqNXLSCCrV7FmV/u3SjCBShg==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.5.tgz", + "integrity": "sha512-U1GAG6FTjhAO04MyH4xn23wRNBkT6H7NentHh+8UxD6ShXKBm5SY4RedKJzkUThANxb9rUKIPc7B8ew9Xo/cWg==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -1928,13 +1882,16 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.4.tgz", - "integrity": "sha512-+sPAXq3bxmFwhVFJnSwkSF5Rw2ZAJMH3MF6C9IveAEOdSpgajPhoQhbbAK12SehN9j2QrHpk4J/cHsa/HqWaYQ==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.5.tgz", + "integrity": "sha512-iqLDgpzobG7gpBF0fwEVS/LT8kmN7+S0E2YKFDtqliJfzNLnAiV2Nnyb+ehCDCJgAZBASkYHR2o60VQWikpqIg==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -1945,13 +1902,16 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.4.tgz", - "integrity": "sha512-R4+ZCDtG9kHArasyBO+UBD6jr/FcFCTH8QkNTOCu0pRJzCWyWC4EtZa2AmUZB5h3e0jD7bRV2KvrENcf8rndBg==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.5.tgz", + "integrity": "sha512-NdODlSugMzTlENPTa4z0xB82dTUlCpsrOxc43///aNkTLblIYH4XpYflBbf5ySlQuP8AA4AZd1qXhV07IdrHdQ==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -1962,13 +1922,16 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.4.tgz", - "integrity": "sha512-gGvFTGpOIQDb5CQ2VC0n9Z2UEqlP46c4aNgHmAMytYieTGEcfqhfCFnhs6xjt0S3igE6q5GLuIXtdQt3Izok+g==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.5.tgz", + "integrity": "sha512-NlKa7GpbQmNhZf9kakQeddqZyT7itN7jjWdakELeXyTU3pg/83fTysRRDPJD0akTfKDl6vZYNT9Zqn4MYZVBOA==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT OR Apache-2.0", "optional": true, "os": [ @@ -1979,9 +1942,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.4.tgz", - "integrity": "sha512-trzCqM7x+Gn832zZHgr28JoYagQNX4CZkUZhMUac2YxvvyDRLJDrb5m9IA7CaZLlX6lTQmADVfLEKP1et1Ma4Q==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.5.tgz", + "integrity": "sha512-EBfrTqRIWOFSd7CQb/0ttjHMR88zm3hGravnDwUA9wHAaCAYsULKDebWcN5RmrEo1KBtl/gDVJMrFjNR0pdGUw==", "cpu": [ "arm64" ], @@ -1996,9 +1959,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.4.tgz", - "integrity": "sha512-gnOHKVPFAAPrpoPt2t+Q6FZ7RPry/FDV3GcpU53P3PtLNnQjBmKyN2Vh/JtqXet+H4pme8CC76rScwdjDcT1/A==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.5.tgz", + "integrity": "sha512-Pmhv9zT95YzECfjEHNl3mN9Vhusw9VA5KHY0ZvlGsxsjwS5cb7vpRnHzJIv0vG7jB0JI7xEaMH9ddfZm/RozBw==", "cpu": [ "x64" ], @@ -5075,9 +5038,9 @@ } }, "node_modules/@oclif/core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.8.1.tgz", - "integrity": "sha512-07mq0vKCWNsB85ZHeBMlTAiO0KLFqHyAeRK3bD2K8CI1tX3tiwkWw1lZQZkiw8MUBrhxdROhMkYMY4Q0l7JHqA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.8.3.tgz", + "integrity": "sha512-f7Rc1JBZO0wNMyDmNzP5IFOv5eM97S9pO4JUFdu2OLyk73YeBI9wog1Yyf666NOQvyptkbG1xh8inzMDQLNTyQ==", "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", @@ -5090,7 +5053,7 @@ "indent-string": "^4.0.0", "is-wsl": "^2.2.0", "lilconfig": "^3.1.3", - "minimatch": "^10.2.1", + "minimatch": "^10.2.4", "semver": "^7.7.3", "string-width": "^4.2.3", "supports-color": "^8", @@ -5113,9 +5076,9 @@ } }, "node_modules/@oclif/core/node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -5125,9 +5088,9 @@ } }, "node_modules/@oclif/core/node_modules/minimatch": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", - "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.2" @@ -6165,22 +6128,6 @@ "node": ">=18.0.0" } }, - "node_modules/@salesforce/core/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@salesforce/dev-config": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@salesforce/dev-config/-/dev-config-4.3.2.tgz", @@ -7428,14 +7375,14 @@ } }, "node_modules/@stryker-mutator/api": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-9.5.1.tgz", - "integrity": "sha512-Z8Waw3v9XfqouOKnRjPv0ePnu7UfYfErJaNE2+al2bqquFaTuONYaeED55A4gzupjmfdGCfBdnMdmiuH4zww5g==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-9.6.0.tgz", + "integrity": "sha512-kJEEwOVoWDXGEIXuM+9efT6LSJ7nyxnQQvjEoKg8GSZXbDUjfD0tqA0aBD06U1SzQLKCM7ffjgPffr154MHZKw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "mutation-testing-metrics": "3.7.1", - "mutation-testing-report-schema": "3.7.1", + "mutation-testing-metrics": "3.7.2", + "mutation-testing-report-schema": "3.7.2", "tslib": "~2.8.0", "typed-inject": "~5.0.0" }, @@ -7444,17 +7391,17 @@ } }, "node_modules/@stryker-mutator/core": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-9.5.1.tgz", - "integrity": "sha512-dudpdpxfWaoYcFE9XIYm+z0La2WMPh8M0DHQYuAT+zZ9VTaFd0L92DmzAuqc7oJgR9DX66nYoU7i0GQ5+5oOIQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-9.6.0.tgz", + "integrity": "sha512-oSbw01l6HXHt0iW9x5fQj7yHGGT8ZjCkXSkI7Bsu0juO7Q6vRMXk7XcvKpCBgRgzKXi1osg8+iIzj7acHuxepQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@inquirer/prompts": "^8.0.0", - "@stryker-mutator/api": "9.5.1", - "@stryker-mutator/instrumenter": "9.5.1", - "@stryker-mutator/util": "9.5.1", - "ajv": "~8.17.1", + "@stryker-mutator/api": "9.6.0", + "@stryker-mutator/instrumenter": "9.6.0", + "@stryker-mutator/util": "9.6.0", + "ajv": "~8.18.0", "chalk": "~5.6.0", "commander": "~14.0.0", "diff-match-patch": "1.0.5", @@ -7462,11 +7409,11 @@ "execa": "~9.6.0", "json-rpc-2.0": "^1.7.0", "lodash.groupby": "~4.6.0", - "minimatch": "~10.1.0", + "minimatch": "~10.2.4", "mutation-server-protocol": "~0.4.0", - "mutation-testing-elements": "3.7.1", - "mutation-testing-metrics": "3.7.1", - "mutation-testing-report-schema": "3.7.1", + "mutation-testing-elements": "3.7.2", + "mutation-testing-metrics": "3.7.2", + "mutation-testing-report-schema": "3.7.2", "npm-run-path": "~6.0.0", "progress": "~2.0.3", "rxjs": "~7.8.1", @@ -7485,59 +7432,59 @@ } }, "node_modules/@stryker-mutator/core/node_modules/balanced-match": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", - "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" } }, "node_modules/@stryker-mutator/core/node_modules/brace-expansion": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", - "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" } }, "node_modules/@stryker-mutator/core/node_modules/minimatch": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.3.tgz", - "integrity": "sha512-IF6URNyBX7Z6XfvjpaNy5meRxPZiIf2OqtOoSLs+hLJ9pJAScnM1RjrFcbCaD85y42KcI+oZmKjFIJKYDFjQfg==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@stryker-mutator/instrumenter": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-9.5.1.tgz", - "integrity": "sha512-WjuqwJOmiftTGCzhtWhyXqMd5+TVMVsoAWDonvp4uVf5/1HPN/dVcDYILTrfK/sfiOvtLCK30byRBhoaUnOs4A==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-9.6.0.tgz", + "integrity": "sha512-tWdRYfm9LF4Go7cNOos0xEIOEnN7ZOSj38rfXvGZS9IINlvYBrBCl2xcz/67v6l5A7xksMWWByZRIq2bgdnnUg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@babel/core": "~7.28.0", - "@babel/generator": "~7.28.0", - "@babel/parser": "~7.28.0", - "@babel/plugin-proposal-decorators": "~7.28.0", + "@babel/core": "~7.29.0", + "@babel/generator": "~7.29.0", + "@babel/parser": "~7.29.0", + "@babel/plugin-proposal-decorators": "~7.29.0", "@babel/plugin-transform-explicit-resource-management": "^7.28.0", "@babel/preset-typescript": "~7.28.0", - "@stryker-mutator/api": "9.5.1", - "@stryker-mutator/util": "9.5.1", + "@stryker-mutator/api": "9.6.0", + "@stryker-mutator/util": "9.6.0", "angular-html-parser": "~10.4.0", "semver": "~7.7.0", "tslib": "2.8.1", @@ -7548,14 +7495,14 @@ } }, "node_modules/@stryker-mutator/jest-runner": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@stryker-mutator/jest-runner/-/jest-runner-9.5.1.tgz", - "integrity": "sha512-GkBxAbYneReYBGFcdDqFwM1kYI21pj9puTaL1MmQ7zXUqX9U4ua1CpQlS5HbfvcYJqLuH+7CVRydS+pztn+2cQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@stryker-mutator/jest-runner/-/jest-runner-9.6.0.tgz", + "integrity": "sha512-o98fwUe9VSXkHaiixAm3FJzQjUFAtZSkh6eWya79nCbqOV9mYQCMUmCN0apEVQZzKyW35FGVgjCohuFUQ9n+gQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@stryker-mutator/api": "9.5.1", - "@stryker-mutator/util": "9.5.1", + "@stryker-mutator/api": "9.6.0", + "@stryker-mutator/util": "9.6.0", "semver": "~7.7.0", "tslib": "~2.8.0" }, @@ -7563,13 +7510,13 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@stryker-mutator/core": "9.5.1" + "@stryker-mutator/core": "9.6.0" } }, "node_modules/@stryker-mutator/util": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-9.5.1.tgz", - "integrity": "sha512-KXmbEeXF3Z20P+9W8i/f1j+U5nWSm9oeb1VNV6j5/RfzhnMKWZCrvojJqRfnxdkCiMIFWMAHSlM9K0mfFZLNXQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-9.6.0.tgz", + "integrity": "sha512-gw7fJOFNHEj9inAEOodD9RrrMEMhZmWJ46Ww/kDJAXlSsBBmdwCzeomNLngmLTvgp14z7Tfq85DHYwvmNMdOxA==", "dev": true, "license": "Apache-2.0" }, @@ -7821,9 +7768,9 @@ } }, "node_modules/@types/node": { - "version": "25.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.2.tgz", - "integrity": "sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==", + "version": "25.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz", + "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", "license": "MIT", "dependencies": { "undici-types": "~7.18.0" @@ -8259,10 +8206,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -8643,13 +8589,16 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.18", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.18.tgz", - "integrity": "sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", "dev": true, "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/basic-ftp": { @@ -8722,9 +8671,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.26.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", - "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -8742,11 +8691,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.9", - "caniuse-lite": "^1.0.30001746", - "electron-to-chromium": "^1.5.227", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -8980,9 +8929,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001751", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "version": "1.0.30001775", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", + "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==", "dev": true, "funding": [ { @@ -9347,9 +9296,9 @@ } }, "node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { @@ -9859,9 +9808,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.237", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.237.tgz", - "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==", + "version": "1.5.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", + "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", "dev": true, "license": "ISC" }, @@ -10230,9 +10179,9 @@ "license": "MIT" }, "node_modules/fast-xml-parser": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.1.tgz", - "integrity": "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.2.tgz", + "integrity": "sha512-pw/6pIl4k0CSpElPEJhDppLzaixDEuWui2CUQQBH/ECDf7+y6YwA4Gf7Tyb0Rfe4DIMuZipYj4AEL0nACKglvQ==", "funding": [ { "type": "github", @@ -10822,9 +10771,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", - "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -13735,19 +13684,18 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "16.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz", - "integrity": "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.1.tgz", + "integrity": "sha512-bqvvquXzFBAlSbluugR4KXAe4XnO/QZcKVszpkBtqLWa2KEiVy8n6Xp38OeUbv/gOJOX4Vo9u5pFt/ADvbm42Q==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^14.0.2", + "commander": "^14.0.3", "listr2": "^9.0.5", "micromatch": "^4.0.8", - "nano-spawn": "^2.0.0", - "pidtree": "^0.6.0", "string-argv": "^0.3.2", - "yaml": "^2.8.1" + "tinyexec": "^1.0.2", + "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -14779,26 +14727,26 @@ } }, "node_modules/mutation-testing-elements": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.7.1.tgz", - "integrity": "sha512-R8uWHQLpQbKRCWnF1D1DB0ldft2s33KuR0xvFm+V/kam6hCz1L57INSHAFTtVJmGhaKqTeH2yXsFwtjjrVDi3A==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.7.2.tgz", + "integrity": "sha512-i7X2Q4X5eYon72W2QQ9HND7plVhQcqTnv+Xc3KeYslRZSJ4WYJoal8LFdbWm7dKWLNE0rYkCUrvboasWzF3MMA==", "dev": true, "license": "Apache-2.0" }, "node_modules/mutation-testing-metrics": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.7.1.tgz", - "integrity": "sha512-vtRtoYNdQpz9d8Qx/K5Anem0afHRzrKf8K8WRAhCs0/oziM8wwOEVn7iWBJESFmSIghkq/1vG8YEzLR2O9rC/A==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.7.2.tgz", + "integrity": "sha512-ichXZSC4FeJbcVHYOWzWUhNuTJGogc0WiQol8lqEBrBSp+ADl3fmcZMqrx0ogInEUiImn+A8JyTk6uh9vd25TQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "mutation-testing-report-schema": "3.7.1" + "mutation-testing-report-schema": "3.7.2" } }, "node_modules/mutation-testing-report-schema": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.7.1.tgz", - "integrity": "sha512-aKnIreO4je4B0mWD/pAPWw0IZ35de6ScL2nexUOKI/Lt0Qd7nGq1sH7JqmQUd7iqEokg0JlgmeiW5ghpOuP1og==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.7.2.tgz", + "integrity": "sha512-fN5M61SDzIOeJyatMOhGPLDOFz5BQIjTNPjo4PcHIEUWrejO4i4B5PFuQ/2l43709hEsTxeiXX00H73WERKcDw==", "dev": true, "license": "Apache-2.0" }, @@ -14811,19 +14759,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/nano-spawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz", - "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" - } - }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -14954,9 +14889,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.25", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.25.tgz", - "integrity": "sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, @@ -15881,19 +15816,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pino": { "version": "9.14.0", "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", @@ -18458,9 +18380,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -18985,15 +18907,18 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { diff --git a/package.json b/package.json index 1140a249..54c302b5 100644 --- a/package.json +++ b/package.json @@ -48,13 +48,13 @@ "access": "public" }, "dependencies": { - "@oclif/core": "^4.8.1", + "@oclif/core": "^4.8.3", "@salesforce/core": "^8.26.3", "@salesforce/sf-plugins-core": "^12.2.6", "@salesforce/source-deploy-retrieve": "^12.31.14", "async": "^3.2.6", "fast-equals": "^6.0.0", - "fast-xml-parser": "^5.4.1", + "fast-xml-parser": "^5.4.2", "fs-extra": "^11.3.3", "ignore": "^7.0.5", "lodash-es": "^4.17.23", @@ -64,7 +64,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@biomejs/biome": "2.4.4", + "@biomejs/biome": "2.4.5", "@commitlint/cli": "^20.4.2", "@commitlint/config-conventional": "^20.4.2", "@jest/globals": "^30.2.0", @@ -73,8 +73,8 @@ "@salesforce/cli-plugins-testkit": "^5.3.41", "@salesforce/dev-config": "^4.3.2", "@salesforce/ts-sinon": "^1.4.31", - "@stryker-mutator/core": "^9.5.1", - "@stryker-mutator/jest-runner": "^9.5.1", + "@stryker-mutator/core": "^9.6.0", + "@stryker-mutator/jest-runner": "^9.6.0", "@types/async": "^3.2.25", "@types/chai": "^5.2.3", "@types/fs-extra": "^11.0.4", @@ -82,14 +82,14 @@ "@types/lodash": "^4.17.24", "@types/lodash-es": "^4.17.12", "@types/mocha": "^10.0.10", - "@types/node": "^25.3.2", + "@types/node": "^25.3.3", "benchmark": "^2.1.4", "chai": "^6.2.2", "husky": "^9.1.7", "jest": "^30.2.0", "jest-util": "^30.2.0", "knip": "^5.85.0", - "lint-staged": "^16.2.7", + "lint-staged": "^16.3.1", "lodash": "^4.17.23", "mocha": "^11.7.5", "nyc": "^18.0.0", diff --git a/src/metadata/sdrMetadataAdapter.ts b/src/metadata/sdrMetadataAdapter.ts index e0d392a5..69d8f0cb 100644 --- a/src/metadata/sdrMetadataAdapter.ts +++ b/src/metadata/sdrMetadataAdapter.ts @@ -176,6 +176,12 @@ export class SDRMetadataAdapter { (child: unknown) => (child as SDRMetadataType).name ), }), + ...(sdrType.strategies?.adapter && { + adapter: sdrType.strategies.adapter, + }), + ...(sdrType.strategies?.decomposition && { + decomposition: sdrType.strategies.decomposition, + }), } as Metadata } diff --git a/src/schemas/metadata.ts b/src/schemas/metadata.ts index 098c134e..a49496c3 100644 --- a/src/schemas/metadata.ts +++ b/src/schemas/metadata.ts @@ -43,6 +43,8 @@ export const MetadataSchema = BaseMetadataSchema.merge( inFolder: z.boolean(), metaFile: z.boolean(), childXmlNames: z.array(z.string()).optional(), + adapter: z.string().optional(), + decomposition: z.string().optional(), }) /** diff --git a/src/service/typeHandlerFactory.ts b/src/service/typeHandlerFactory.ts index 042c3ae1..17b40754 100644 --- a/src/service/typeHandlerFactory.ts +++ b/src/service/typeHandlerFactory.ts @@ -25,69 +25,44 @@ import ReportingFolderHandler from './reportingFolderHandler.js' import SharedFolder from './sharedFolderHandler.js' import Standard from './standardHandler.js' -const handlerMap = { - AssignmentRules: InFile, +const FOLDER_PER_TYPE = 'folderPerType' + +// Explicit overrides for types that deviate from SDR-derived defaults +const handlerMap: Record = { AuraDefinitionBundle: Lwc, - AutoResponseRules: InFile, - BusinessProcess: CustomObjectChildHandler, - CompactLayout: CustomObjectChildHandler, CustomField: CustomFieldHandler, CustomFieldTranslation: ObjectTranslation, CustomLabel: CustomLabel, CustomObject: CustomObject, CustomObjectTranslation: ObjectTranslation, Dashboard: ReportingFolderHandler, - DigitalExperienceBundle: InBundle, - Document: InFolder, - EmailTemplate: InFolder, - EscalationRules: InFile, - ExperienceBundle: InResource, - FieldSet: CustomObjectChildHandler, Flow: FlowHandler, GenAiFunction: Lwc, - GenAiPlannerBundle: InResource, GlobalValueSetTranslation: InFile, - Index: CustomObjectChildHandler, LightningComponentBundle: Lwc, - LightningTypeBundle: InResource, - ListView: CustomObjectChildHandler, - MarketingAppExtension: InFile, - MatchingRules: InFile, PermissionSet: ContainedDecomposed, - Profile: InFile, - RecordType: CustomObjectChildHandler, Report: ReportingFolderHandler, - SharingCriteriaRule: Decomposed, - SharingGuestRule: Decomposed, - SharingOwnerRule: Decomposed, - SharingReason: CustomObjectChildHandler, - SharingRules: InFile, StandardValueSetTranslation: InFile, - StaticResource: InResource, Territory2: Decomposed, Territory2Model: CustomObject, Territory2Rule: Decomposed, - Translations: InFile, - ValidationRule: CustomObjectChildHandler, VirtualBot: Bot, VirtualDiscovery: SharedFolder, VirtualModeration: SharedFolder, VirtualWave: SharedFolder, - WaveTemplateBundle: InResource, - WebLink: CustomObjectChildHandler, - Workflow: InFile, - WorkflowAlert: Decomposed, - WorkflowFieldUpdate: Decomposed, - WorkflowFlowAction: Decomposed, - WorkflowKnowledgePublish: Decomposed, - WorkflowOutboundMessage: Decomposed, - WorkflowRule: Decomposed, - WorkflowSend: Decomposed, - WorkflowTask: Decomposed, +} + +// Maps SDR strategies.adapter value to default handler +const adapterHandlerMap: Record = { + bundle: InResource, + digitalExperience: InBundle, + mixedContent: InResource, } export default class TypeHandlerFactory { protected readonly resolver: MetadataBoundaryResolver + private readonly metadataByXmlName: Map + private readonly inFileParentXmlNames: Set constructor( protected readonly work: Work, @@ -95,6 +70,9 @@ export default class TypeHandlerFactory { ) { const gitAdapter = GitAdapter.getInstance(work.config) this.resolver = new MetadataBoundaryResolver(metadata, gitAdapter) + this.metadataByXmlName = new Map() + this.inFileParentXmlNames = new Set() + this.buildIndex() } @log @@ -105,9 +83,53 @@ export default class TypeHandlerFactory { const revision = changeType === DELETION ? this.work.config.from : this.work.config.to const element = await this.resolver.createElement(path, type, revision) - const xmlName = type.xmlName as keyof typeof handlerMap - return xmlName in handlerMap - ? new handlerMap[xmlName](changeType, element, this.work) - : new Standard(changeType, element, this.work) + const Handler = this.resolveHandler(type) + return new Handler(changeType, element, this.work) + } + + private buildIndex(): void { + for (const m of this.metadata.values()) { + this.metadataByXmlName.set(m.xmlName!, m) + } + for (const m of this.metadata.values()) { + if (m.xmlTag && m.key && m.parentXmlName) { + const parent = this.metadataByXmlName.get(m.parentXmlName) + if (parent && !parent.adapter) { + this.inFileParentXmlNames.add(m.parentXmlName) + } + } + } + } + + private resolveHandler(type: Metadata): typeof Standard { + const xmlName = type.xmlName! + + if (xmlName in handlerMap) { + return handlerMap[xmlName] + } + + if (type.inFolder) { + return InFolder + } + + if (type.adapter && type.adapter in adapterHandlerMap) { + return adapterHandlerMap[type.adapter] + } + + if (type.parentXmlName) { + const parent = this.metadataByXmlName.get(type.parentXmlName) + if (type.xmlTag && type.key && !parent?.adapter) { + return Decomposed + } + if (!type.xmlTag && parent?.decomposition === FOLDER_PER_TYPE) { + return CustomObjectChildHandler + } + } + + if (this.inFileParentXmlNames.has(xmlName)) { + return InFile + } + + return Standard } }