diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 414f2d7f4..5ba10ed39 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -21,5 +21,6 @@ "libs/shared/config-cat-core": "0.2.2", "libs/providers/unleash-web": "0.1.1", "libs/providers/growthbook": "0.1.2", - "libs/providers/aws-ssm": "0.1.3" + "libs/providers/aws-ssm": "0.1.3", + "libs/providers/flagsmith-provider": "0.1.0" } diff --git a/libs/providers/flagsmith/.eslintrc.json b/libs/providers/flagsmith/.eslintrc.json new file mode 100644 index 000000000..414536eff --- /dev/null +++ b/libs/providers/flagsmith/.eslintrc.json @@ -0,0 +1,29 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*", "node_modules/**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.json"], + "rules": { + "@nx/dependency-checks": [ + "error", + { + "ignoredDependencies": ["flagsmith-nodejs"] + } + ] + } + } + ] +} diff --git a/libs/providers/flagsmith/README.md b/libs/providers/flagsmith/README.md new file mode 100644 index 000000000..ea0b3e7c7 --- /dev/null +++ b/libs/providers/flagsmith/README.md @@ -0,0 +1,145 @@ +# Flagsmith Provider + +This is an OpenFeature provider implementation for using [Flagsmith](https://flagsmith.com), a managed feature flag and remote config platform for Node.js applications. + +## Installation + +```bash +npm install @openfeature/flagsmith-provider @openfeature/server-sdk@^1.19 flagsmith-nodejs@^6.1 +``` + +## Usage + +The Flagsmith provider uses the [Flagsmith Node.js SDK](https://docs.flagsmith.com/clients/server-side). + +It can be created by passing a configured Flagsmith client instance to the `FlagsmithOpenFeatureProvider` constructor. + +### Example using the default configuration + +```javascript +import { OpenFeature } from '@openfeature/server-sdk'; +import FlagsmithOpenFeatureProvider from '@openfeature/flagsmith-provider'; +import Flagsmith from 'flagsmith-nodejs'; + +// Create the Flagsmith client +const flagsmith = new Flagsmith({ + environmentKey: '', +}); + +// Create and set the provider +const provider = new FlagsmithOpenFeatureProvider(flagsmith); +await OpenFeature.setProviderAndWait(provider); + +// Obtain a client instance and evaluate feature flags +const client = OpenFeature.getClient(); + +const value = await client.getBooleanValue('my-flag', false, { targetingKey: 'user-123' }); +console.log(`my-flag: ${value}`); + +// On application shutdown, clean up the OpenFeature provider +await OpenFeature.clearProviders(); +``` + +### Example using custom configuration + +```javascript +import { OpenFeature } from '@openfeature/server-sdk'; +import FlagsmithOpenFeatureProvider from '@openfeature/flagsmith-provider'; +import Flagsmith from 'flagsmith-nodejs'; + +// Create the Flagsmith client with custom options +const flagsmith = new Flagsmith({ + environmentKey: '', + enableLocalEvaluation: true, + retries: 3, +}); + +// Create the provider with custom configuration +const provider = new FlagsmithOpenFeatureProvider(flagsmith, { + returnValueForDisabledFlags: true, + useFlagsmithDefaults: true, + useBooleanConfigValue: false, +}); + +await OpenFeature.setProviderAndWait(provider); + +// ... +``` + +## Configuration Options + +The provider accepts the following configuration options: + +| Option | Type | Default | Description | +| ----------------------------- | --------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `returnValueForDisabledFlags` | `boolean` | `false` | If `true`, returns flag values even when disabled. If `false`, throws error for disabled flags (except boolean flags which return `false` with reason `DISABLED` when `useBooleanConfigValue=false`) | +| `useFlagsmithDefaults` | `boolean` | `false` | If `true`, allows using Flagsmith default flag values. If `false`, returns default value with error code for missing flags | +| `useBooleanConfigValue` | `boolean` | `false` | If `true`, returns `flag.value` for boolean flags. If `false`, returns `flag.enabled` | + +## Evaluation Context + +The OpenFeature Evaluation Context is mapped to Flagsmith's identity and traits system. + +### Identity Resolution + +- If `targetingKey` is provided in the evaluation context, the provider will use `getIdentityFlags()` to retrieve flags for that specific identity +- If no `targetingKey` is provided, the provider will use `getEnvironmentFlags()` to retrieve environment-level flags + +### Traits + +The `traits` field in the evaluation context is passed directly to Flagsmith as user traits for targeting and segmentation. + +#### Example + +```javascript +const evaluationContext = { + targetingKey: 'user-123', + traits: { + email: 'user@example.com', + plan: 'premium', + age: 25, + }, +}; + +const value = await client.getBooleanValue('premium-feature', false, evaluationContext); +``` + +## Flag Value Types + +The provider supports all OpenFeature flag value types: + +- **Boolean**: Returns `flag.enabled` by default, or `flag.value` if `useBooleanConfigValue` is true +- **String**: Returns the flag value as-is if it's a string +- **Number**: Attempts to parse the flag value as a number +- **Object**: Attempts to parse the flag value as JSON + +## Error Handling + +The provider handles various error scenarios: + +- **Flag Not Found**: Returns default value with `FLAG_NOT_FOUND` error code +- **Type Mismatch**: Returns default value with `TYPE_MISMATCH` error code if flag value cannot be converted to requested type +- **Disabled Flags**: + – For boolean flags with `useBooleanConfigValue=false`: returns `false` with reason `DISABLED` + – For other flags: throws `GeneralError` unless `returnValueForDisabledFlags` is `true` +- **General Errors**: Throws `GeneralError` for client communication issues + +## Building + +Run: + +```bash +nx package providers-flagsmith +``` + +to build the library. + +## Running unit tests + +Run: + +```bash +npx nx run providers-flagsmith:test +``` + +to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/providers/flagsmith/jest.config.ts b/libs/providers/flagsmith/jest.config.ts new file mode 100644 index 000000000..3b791ef7e --- /dev/null +++ b/libs/providers/flagsmith/jest.config.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ +export default { + displayName: 'providers-flagsmith', + preset: '../../../jest.preset.js', + transform: { + '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../../coverage/libs/providers/flagsmith', +}; diff --git a/libs/providers/flagsmith/package-lock.json b/libs/providers/flagsmith/package-lock.json new file mode 100644 index 000000000..3cd0fa683 --- /dev/null +++ b/libs/providers/flagsmith/package-lock.json @@ -0,0 +1,499 @@ +{ + "name": "@openfeature/flagsmith-provider", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@openfeature/flagsmith-provider", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@openfeature/server-sdk": "^1.17.1", + "flagsmith-nodejs": "^6.1.0" + } + }, + "node_modules/@openfeature/core": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.9.0.tgz", + "integrity": "sha512-pbJM8bD9yApOzZDEF5njL0A3B1bbT+DHtyCbYVCf5NOVGR6nNWiQaWFcQwrbvfOx9pvVm770/uRfBCzdL2XAUA==", + "peer": true + }, + "node_modules/@openfeature/server-sdk": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@openfeature/server-sdk/-/server-sdk-1.19.0.tgz", + "integrity": "sha512-sxmYKkBCpWWkKX2xJt6bFK15dorfR2lH27lkeKduTFPXRMV+pO7eORUelI9gctXhxvfXbDGK94ybq5fiso3/vg==", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@openfeature/core": "^1.9.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/flagsmith-nodejs": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/flagsmith-nodejs/-/flagsmith-nodejs-6.1.0.tgz", + "integrity": "sha512-MCPsZajSvdJQBLJtxsMqkNbL1sfPDbG8jeZQQuOY9w6ov5BE7wCelBir7jNMu+CjhPY1NpdZfTp4PkQAFLISOg==", + "dependencies": { + "pino": "^8.8.0", + "semver": "^7.3.7", + "undici-types": "^6.19.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/pino": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.6.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/thread-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + } + }, + "dependencies": { + "@openfeature/core": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.9.0.tgz", + "integrity": "sha512-pbJM8bD9yApOzZDEF5njL0A3B1bbT+DHtyCbYVCf5NOVGR6nNWiQaWFcQwrbvfOx9pvVm770/uRfBCzdL2XAUA==", + "peer": true + }, + "@openfeature/server-sdk": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@openfeature/server-sdk/-/server-sdk-1.19.0.tgz", + "integrity": "sha512-sxmYKkBCpWWkKX2xJt6bFK15dorfR2lH27lkeKduTFPXRMV+pO7eORUelI9gctXhxvfXbDGK94ybq5fiso3/vg==", + "requires": {} + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==" + }, + "flagsmith-nodejs": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/flagsmith-nodejs/-/flagsmith-nodejs-6.1.0.tgz", + "integrity": "sha512-MCPsZajSvdJQBLJtxsMqkNbL1sfPDbG8jeZQQuOY9w6ov5BE7wCelBir7jNMu+CjhPY1NpdZfTp4PkQAFLISOg==", + "requires": { + "pino": "^8.8.0", + "semver": "^7.3.7", + "undici-types": "^6.19.8" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==" + }, + "pino": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", + "requires": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.6.0" + } + }, + "pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "requires": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, + "quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==" + }, + "sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "requires": { + "atomic-sleep": "^1.0.0" + } + }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "thread-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", + "requires": { + "real-require": "^0.2.0" + } + }, + "undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + } + } +} diff --git a/libs/providers/flagsmith/package.json b/libs/providers/flagsmith/package.json new file mode 100644 index 000000000..682234b7a --- /dev/null +++ b/libs/providers/flagsmith/package.json @@ -0,0 +1,13 @@ +{ + "name": "@openfeature/flagsmith-provider", + "version": "0.1.0", + "scripts": { + "publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi", + "current-version": "echo $npm_package_version" + }, + "license": "Apache-2.0", + "dependencies": { + "@openfeature/server-sdk": "^1.17.1", + "flagsmith-nodejs": "^6.1.0" + } +} diff --git a/libs/providers/flagsmith/project.json b/libs/providers/flagsmith/project.json new file mode 100644 index 000000000..b86beeca2 --- /dev/null +++ b/libs/providers/flagsmith/project.json @@ -0,0 +1,65 @@ +{ + "name": "providers-flagsmith", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/providers/flagsmith/src", + "projectType": "library", + "targets": { + "publish": { + "executor": "nx:run-commands", + "options": { + "command": "npm run publish-if-not-exists", + "cwd": "dist/libs/providers/flagsmith" + }, + "dependsOn": [ + { + "projects": "self", + "target": "package" + } + ] + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/providers/flagsmith/jest.config.ts" + } + }, + "package": { + "executor": "@nx/rollup:rollup", + "outputs": ["{options.outputPath}"], + "options": { + "project": "libs/providers/flagsmith/package.json", + "outputPath": "dist/libs/providers/flagsmith", + "entryFile": "libs/providers/flagsmith/src/index.ts", + "tsConfig": "libs/providers/flagsmith/tsconfig.lib.json", + "compiler": "tsc", + "generateExportsField": true, + "umdName": "flagsmith", + "external": "all", + "format": ["cjs", "esm"], + "assets": [ + { + "glob": "package.json", + "input": "./assets", + "output": "./src/" + }, + { + "glob": "LICENSE", + "input": "./", + "output": "./" + }, + { + "glob": "README.md", + "input": "./libs/providers/flagsmith", + "output": "./" + } + ] + } + } + }, + "tags": [] +} diff --git a/libs/providers/flagsmith/src/index.ts b/libs/providers/flagsmith/src/index.ts new file mode 100644 index 000000000..3010dbf2d --- /dev/null +++ b/libs/providers/flagsmith/src/index.ts @@ -0,0 +1 @@ +export * from './lib/flagsmith-provider'; diff --git a/libs/providers/flagsmith/src/lib/flagsmith-provider.spec.ts b/libs/providers/flagsmith/src/lib/flagsmith-provider.spec.ts new file mode 100644 index 000000000..b747b7d72 --- /dev/null +++ b/libs/providers/flagsmith/src/lib/flagsmith-provider.spec.ts @@ -0,0 +1,536 @@ +import FlagsmithOpenFeatureProvider from './flagsmith-provider'; +import { type Logger, StandardResolutionReasons, ErrorCode, GeneralError } from '@openfeature/server-sdk'; +import { type Flagsmith, type Flags, type BaseFlag } from 'flagsmith-nodejs'; +import { mockFlagData } from './flagsmith.mocks'; + +jest.mock('flagsmith-nodejs'); + +const loggerMock: Logger = { + debug: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + error: jest.fn(), +}; + +describe('FlagsmithOpenFeatureProvider', () => { + let defaultProvider: FlagsmithOpenFeatureProvider; + let mockFlagsmith: jest.Mocked; + let mockFlags: jest.Mocked; + + const targetingKey = 'test-user-123'; + const evaluationContext = { targetingKey }; + + beforeEach(() => { + mockFlags = { + getFlag: jest.fn(), + } as unknown as jest.Mocked; + + mockFlagsmith = { + getEnvironmentFlags: jest.fn().mockResolvedValue(mockFlags), + getIdentityFlags: jest.fn().mockResolvedValue(mockFlags), + } as unknown as jest.Mocked; + + defaultProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: false, + useBooleanConfigValue: false, + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('constructor', () => { + it('should create provider instance with correct metadata', () => { + expect(defaultProvider).toBeInstanceOf(FlagsmithOpenFeatureProvider); + expect(defaultProvider.metadata).toEqual({ + name: 'flagsmith-provider', + }); + }); + + it('should set correct runsOn property', () => { + expect(defaultProvider.runsOn).toEqual('server'); + }); + }); + + describe('configuration', () => { + describe('useBooleanConfigValue', () => { + let useBooleanConfigProvider: FlagsmithOpenFeatureProvider; + beforeEach(() => { + useBooleanConfigProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: true, + useFlagsmithDefaults: false, + useBooleanConfigValue: true, + }); + }); + + it('should return flag.enabled for a string boolean type when useBooleanConfigValue is false', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanAsStringEnabled); + const result = await useBooleanConfigProvider.resolveBooleanEvaluation( + 'test-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(true); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + + it('should return flag.enabled for a boolean type when useBooleanConfigValue is false', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanDisabled); + const result = await useBooleanConfigProvider.resolveBooleanEvaluation( + 'test-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.DISABLED); + }); + + it('should return default value with error details when flag value type does not match requested type', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.jsonValidFlag); + const result = await useBooleanConfigProvider.resolveBooleanEvaluation( + 'disabled-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type boolean'); + }); + + describe('useFlagsmithDefaults', () => { + it('should throw FlagNotFoundError when flag is default and useFlagsmithDefaults is false', async () => { + const useFlagsmithDefaultsProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: false, + useBooleanConfigValue: false, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanDefault); + const result = await useFlagsmithDefaultsProvider.resolveBooleanEvaluation( + 'default-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.FLAG_NOT_FOUND); + expect(result.errorMessage).toContain("Flag 'default-flag' was not found."); + }); + + it('should throw FlagNotFoundError when flag does not exist (undefined) even with useFlagsmithDefaults true', async () => { + const provider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: true, + useBooleanConfigValue: false, + }); + mockFlags.getFlag.mockReturnValue(undefined as unknown as BaseFlag); + const result = await provider.resolveBooleanEvaluation( + 'nonexistent-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.FLAG_NOT_FOUND); + expect(result.errorMessage).toContain("Flag 'nonexistent-flag' was not found."); + }); + + it('should return flag.value when boolean flag is default and useFlagsmithDefaults is true', async () => { + const useFlagsmithDefaultsProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: true, + useBooleanConfigValue: true, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanDefault); + const result = await useFlagsmithDefaultsProvider.resolveBooleanEvaluation( + 'default-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.DEFAULT); + }); + + it('should return flag.value when string flag is default and useFlagsmithDefaults is true', async () => { + const useFlagsmithDefaultsProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: true, + useBooleanConfigValue: true, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.stringDefault); + const result = await useFlagsmithDefaultsProvider.resolveStringEvaluation( + 'default-flag', + '', + evaluationContext, + loggerMock, + ); + expect(result.value).toBe('default-value'); + expect(result.reason).toBe(StandardResolutionReasons.DEFAULT); + }); + }); + }); + + describe('returnValueForDisabledFlags', () => { + it('should return flag value when boolean flag is disabled and returnValueForDisabledFlags is true', async () => { + const returnValueForDisabledFlagsProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: true, + useFlagsmithDefaults: false, + useBooleanConfigValue: false, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanDisabled); + const result = await returnValueForDisabledFlagsProvider.resolveBooleanEvaluation( + 'not-exist-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.DISABLED); + }); + + it('should throw FlagsmithProviderError when string flag is disabled and returnValueForDisabledFlags is false', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.disabledFlag); + await expect( + defaultProvider.resolveStringEvaluation('disabled-flag', 'test-string', evaluationContext, loggerMock), + ).rejects.toThrow(GeneralError); + }); + + it('should return string value when flag is disabled and returnValueForDisabledFlags is true', async () => { + const provider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: true, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.disabledFlag); + const result = await provider.resolveStringEvaluation( + 'disabled-flag', + 'default', + evaluationContext, + loggerMock, + ); + expect(result.value).toBe('disabled-value'); + expect(result.reason).toBe(StandardResolutionReasons.DISABLED); + }); + }); + }); + + describe('getFlags', () => { + it('should call getIdentityFlags when targetingKey is provided', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanAsStringEnabled); + + await defaultProvider.resolveBooleanEvaluation('test-flag', false, evaluationContext, loggerMock); + + expect(mockFlagsmith.getIdentityFlags).toHaveBeenCalledWith(evaluationContext.targetingKey, {}); + expect(mockFlagsmith.getEnvironmentFlags).not.toHaveBeenCalled(); + }); + + it('should call getEnvironmentFlags when no targetingKey is provided', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanAsStringEnabled); + + await defaultProvider.resolveBooleanEvaluation('test-flag', false, {}, loggerMock); + + expect(mockFlagsmith.getEnvironmentFlags).toHaveBeenCalled(); + expect(mockFlagsmith.getIdentityFlags).not.toHaveBeenCalled(); + }); + + it('should pass traits to getIdentityFlags when provided', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanAsStringEnabled); + + await defaultProvider.resolveBooleanEvaluation( + 'test-flag', + false, + { ...evaluationContext, traits: { premium: true, age: 20, name: 'John Doe' } }, + loggerMock, + ); + + expect(mockFlagsmith.getIdentityFlags).toHaveBeenCalledWith(evaluationContext.targetingKey, { + premium: true, + age: 20, + name: 'John Doe', + }); + }); + }); + + describe('resolvers', () => { + describe('resolveBooleanEvaluation', () => { + it('should return flag.enabled with enabled boolean flag', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanEnabled); + const result = await defaultProvider.resolveBooleanEvaluation( + 'test-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(true); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + + it('should return flag.enabled with disabled boolean flag and returnValueForDisabledFlags is true', async () => { + const booleanConfigProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: true, + useFlagsmithDefaults: false, + useBooleanConfigValue: false, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanDisabled); + const result = await booleanConfigProvider.resolveBooleanEvaluation( + 'test-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.DISABLED); + }); + + it('should return flag.enabled with disabled boolean flag and returnValueForDisabledFlags (default) is false', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.booleanDisabled); + const result = await defaultProvider.resolveBooleanEvaluation( + 'test-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.DISABLED); + }); + + it('should return default value with error details when flag value type does not match requested type', async () => { + const booleanConfigProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: false, + useBooleanConfigValue: true, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.stringFlag); + const result = await booleanConfigProvider.resolveBooleanEvaluation( + 'test-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type boolean'); + }); + + it('should return false when flag value is numeric 0', async () => { + const booleanConfigProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: false, + useBooleanConfigValue: true, + }); + mockFlags.getFlag.mockReturnValue({ + enabled: true, + value: 0, + isDefault: false, + } as BaseFlag); + const result = await booleanConfigProvider.resolveBooleanEvaluation( + 'test-flag', + true, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + + it('should return true when flag value is numeric 1', async () => { + const booleanConfigProvider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: false, + useBooleanConfigValue: true, + }); + mockFlags.getFlag.mockReturnValue({ + enabled: true, + value: 1, + isDefault: false, + } as BaseFlag); + const result = await booleanConfigProvider.resolveBooleanEvaluation( + 'test-flag', + false, + evaluationContext, + loggerMock, + ); + expect(result.value).toBe(true); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + }); + + describe('resolveStringEvaluation', () => { + it('should return flag.value with enabled string flag', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.stringFlag); + const result = await defaultProvider.resolveStringEvaluation('test-flag', '', evaluationContext, loggerMock); + expect(result.value).toBe('test-string-value'); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + + it('should throw flag is not enabled with disabled string flag and returnValueForDisabledFlags is false (default)', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.disabledFlag); + await expect( + defaultProvider.resolveStringEvaluation('test-flag', '', evaluationContext, loggerMock), + ).rejects.toThrow(GeneralError); + }); + + it('should return default value with error details when flag value is undefined', async () => { + mockFlags.getFlag.mockReturnValue({ + enabled: true, + value: undefined, + isDefault: false, + } as BaseFlag); + const result = await defaultProvider.resolveStringEvaluation( + 'test-flag', + 'default-string', + evaluationContext, + loggerMock, + ); + expect(result.value).toBe('default-string'); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type string'); + }); + + it('should return a string when flag value is number', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.numberAsStringFlag); + const result = await defaultProvider.resolveStringEvaluation('test-flag', '', evaluationContext, loggerMock); + expect(result.value).toBe('42'); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + + it('should return a string when flag value is JSON', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.jsonValidFlag); + const result = await defaultProvider.resolveStringEvaluation('test-flag', '', evaluationContext, loggerMock); + expect(result.value).toBe('{"key": "value", "nested": {"prop": true}}'); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + }); + + describe('resolveNumberEvaluation', () => { + it('should return a number when flag value is number', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.numberActual); + const result = await defaultProvider.resolveNumberEvaluation('test-flag', 0, evaluationContext, loggerMock); + expect(result.value).toBe(123); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + + it('should return default value with error details when flag value is not a valid number', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.stringFlag); + const result = await defaultProvider.resolveNumberEvaluation('test-flag', 42, evaluationContext, loggerMock); + expect(result.value).toBe(42); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type number'); + }); + + it('should return default value with error details when flag value is not a valid number string', async () => { + mockFlags.getFlag.mockReturnValue({ + enabled: true, + value: 'not-a-number', + isDefault: false, + }); + const result = await defaultProvider.resolveNumberEvaluation('test-flag', 99, evaluationContext, loggerMock); + expect(result.value).toBe(99); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type number'); + }); + + it('should return a number when flag value is a string with whitespace', async () => { + mockFlags.getFlag.mockReturnValue({ + enabled: true, + value: ' 42 ', + isDefault: false, + } as BaseFlag); + const result = await defaultProvider.resolveNumberEvaluation('test-flag', 0, evaluationContext, loggerMock); + expect(result.value).toBe(42); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + }); + + describe('resolveObjectEvaluation', () => { + it('should return a object when flag value is JSON', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.jsonValidFlag); + const result = await defaultProvider.resolveObjectEvaluation('test-flag', {}, evaluationContext, loggerMock); + expect(result.value).toEqual({ key: 'value', nested: { prop: true } }); + expect(result.reason).toBe(StandardResolutionReasons.TARGETING_MATCH); + }); + + it('should return default value with error details when flag value is invalid JSON', async () => { + mockFlags.getFlag.mockReturnValue(mockFlagData.jsonInvalidFlag); + const defaultObj = { default: true }; + const result = await defaultProvider.resolveObjectEvaluation( + 'test-flag', + defaultObj, + evaluationContext, + loggerMock, + ); + expect(result.value).toEqual(defaultObj); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type object'); + }); + + it('should return default value with error details when flag value is undefined', async () => { + mockFlags.getFlag.mockReturnValue({ + enabled: true, + value: undefined, + isDefault: false, + } as BaseFlag); + const defaultObj = { fallback: 'value' }; + const result = await defaultProvider.resolveObjectEvaluation( + 'test-flag', + defaultObj, + evaluationContext, + loggerMock, + ); + expect(result.value).toEqual(defaultObj); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type object'); + }); + }); + + describe('error handling', () => { + it('should throw FlagsmithProviderError when client throws error', async () => { + mockFlagsmith.getIdentityFlags.mockRejectedValue(new Error('test error')); + + await expect( + defaultProvider.resolveBooleanEvaluation('test-flag', false, evaluationContext, loggerMock), + ).rejects.toThrow(GeneralError); + }); + + it('should throw FlagNotFoundError when flag is not found and returnValueForDisabledFlags is false', async () => { + const provider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: false, + useBooleanConfigValue: false, + }); + mockFlagsmith.getIdentityFlags.mockRejectedValue(new Error('not found')); + const result = await provider.resolveBooleanEvaluation('not-exist', false, {}, loggerMock); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.FLAG_NOT_FOUND); + expect(result.errorMessage).toContain("Flag 'not-exist' was not found."); + }); + + it('should return default value with error details when flag value type does not match requested type', async () => { + const provider = new FlagsmithOpenFeatureProvider(mockFlagsmith, { + returnValueForDisabledFlags: false, + useFlagsmithDefaults: false, + useBooleanConfigValue: true, + }); + mockFlags.getFlag.mockReturnValue(mockFlagData.stringFlag); + const result = await provider.resolveBooleanEvaluation('test-flag', false, evaluationContext, loggerMock); + expect(result.value).toBe(false); + expect(result.reason).toBe(StandardResolutionReasons.ERROR); + expect(result.errorCode).toBe(ErrorCode.TYPE_MISMATCH); + expect(result.errorMessage).toContain('is not of type boolean'); + }); + }); + }); +}); diff --git a/libs/providers/flagsmith/src/lib/flagsmith-provider.ts b/libs/providers/flagsmith/src/lib/flagsmith-provider.ts new file mode 100644 index 000000000..c03d04b0f --- /dev/null +++ b/libs/providers/flagsmith/src/lib/flagsmith-provider.ts @@ -0,0 +1,178 @@ +import { + type Provider, + type ProviderMetadata, + type ResolutionDetails, + type EvaluationContext, + type JsonValue, + type FlagValueType, + type Logger, + type FlagValue, + ErrorCode, + GeneralError, + StandardResolutionReasons, +} from '@openfeature/server-sdk'; +import { type Flags, type Flagsmith, type BaseFlag, type TraitConfig, type FlagsmithValue } from 'flagsmith-nodejs'; +import { typeFactory } from './type-factory'; + +type FlagsmithTrait = Record; + +/** + * Configuration options for the Flagsmith OpenFeature provider. + */ +interface FlagsmithProviderConfig { + /** Whether to return values for disabled flags instead of throwing errors */ + returnValueForDisabledFlags?: boolean; + /** Whether to allow Flagsmith default flag values instead of treating as not found */ + useFlagsmithDefaults?: boolean; + /** Whether to return flag.value instead of flag.enabled for boolean flags */ + useBooleanConfigValue?: boolean; +} + +export default class FlagsmithOpenFeatureProvider implements Provider { + readonly metadata: ProviderMetadata = { + name: 'flagsmith-provider', + }; + + readonly runsOn = 'server'; + + private client: Flagsmith; + private returnValueForDisabledFlags: boolean; + private useFlagsmithDefaults: boolean; + private useBooleanConfigValue: boolean; + + /** + * Creates a Flagsmith OpenFeature provider. + * + * @param client - The Flagsmith client instance + * @param config - Provider configuration options + * @param config.returnValueForDisabledFlags - If true, returns flag values even when disabled. If false, throws error for disabled flags. Default: false + * @param config.useFlagsmithDefaults - If true, allows using Flagsmith default flag values. If false, throws FlagNotFoundError for missing flags. Default: false + * @param config.useBooleanConfigValue - If true, returns flag.value for boolean flags. If false, returns flag.enabled. Default: false + */ + constructor(client: Flagsmith, config: FlagsmithProviderConfig = {}) { + this.client = client; + this.returnValueForDisabledFlags = config.returnValueForDisabledFlags ?? false; + this.useFlagsmithDefaults = config.useFlagsmithDefaults ?? false; + this.useBooleanConfigValue = config.useBooleanConfigValue ?? false; + } + + private getFlags(evaluationContext: EvaluationContext): Promise { + const traits = + evaluationContext.traits && typeof evaluationContext.traits === 'object' + ? (evaluationContext.traits as FlagsmithTrait) + : {}; + if (evaluationContext?.targetingKey) { + return this.client.getIdentityFlags(evaluationContext.targetingKey, traits); + } + return this.client.getEnvironmentFlags(); + } + + /** + * Resolves a feature flag value with type conversion and validation. + * + * @param flagKey - The feature flag key to resolve + * @param flagType - The expected return type ('boolean' | 'string' | 'number' | 'object') + * @param evaluationContext - OpenFeature evaluation context with targeting and traits + * @returns Promise resolving to ResolutionDetails with the typed flag value, or error details + * @throws {GeneralError} When an error occurs retrieving flags from Flagsmith client + * @throws {GeneralError} When flag is disabled and returnValueForDisabledFlags is false + */ + private async resolve( + flagKey: string, + flagType: FlagValueType, + evaluationContext: EvaluationContext, + defaultValue: FlagValue, + ): Promise> { + let flag: BaseFlag; + try { + const flags = await this.getFlags(evaluationContext); + flag = flags.getFlag(flagKey); + } catch (error) { + throw new GeneralError('An error occurred retrieving flags from Flagsmith client.', { + cause: error as Error, + }); + } + + if (!flag || (!this.useFlagsmithDefaults && flag.isDefault)) { + return { + value: defaultValue, + reason: StandardResolutionReasons.ERROR, + errorCode: ErrorCode.FLAG_NOT_FOUND, + errorMessage: `Flag '${flagKey}' was not found.`, + }; + } + + if (!this.useBooleanConfigValue && flagType === 'boolean') { + return { + value: flag.enabled, + reason: flag.enabled ? StandardResolutionReasons.TARGETING_MATCH : StandardResolutionReasons.DISABLED, + }; + } + + if (!(this.returnValueForDisabledFlags || flag.enabled)) { + throw new GeneralError(`Flag '${flagKey}' is not enabled.`); + } + + const typedValue = typeFactory(flag.value, flagType); + if (typedValue === undefined || typeof typedValue !== flagType) { + return { + value: defaultValue, + reason: StandardResolutionReasons.ERROR, + errorCode: ErrorCode.TYPE_MISMATCH, + errorMessage: `Flag value ${flag.value} is not of type ${flagType}`, + }; + } + + if (flag?.isDefault) { + return { + value: typedValue, + reason: StandardResolutionReasons.DEFAULT, + }; + } + + return { + value: typedValue, + reason: flag.enabled ? StandardResolutionReasons.TARGETING_MATCH : StandardResolutionReasons.DISABLED, + }; + } + + async resolveBooleanEvaluation( + flagKey: string, + defaultValue: boolean, + context: EvaluationContext, + __: Logger, + ): Promise> { + return this.resolve(flagKey, 'boolean', context, defaultValue); + } + + async resolveStringEvaluation( + flagKey: string, + defaultValue: string, + context: EvaluationContext, + __: Logger, + ): Promise> { + return this.resolve(flagKey, 'string', context, defaultValue); + } + + async resolveNumberEvaluation( + flagKey: string, + defaultValue: number, + context: EvaluationContext, + __: Logger, + ): Promise> { + return this.resolve(flagKey, 'number', context, defaultValue); + } + + async resolveObjectEvaluation( + flagKey: string, + defaultValue: T, + context: EvaluationContext, + __: Logger, + ): Promise> { + return this.resolve(flagKey, 'object', context, defaultValue) as Promise>; + } + + async initialize(context?: EvaluationContext): Promise { + await this.getFlags(context || {}); + } +} diff --git a/libs/providers/flagsmith/src/lib/flagsmith.mocks.ts b/libs/providers/flagsmith/src/lib/flagsmith.mocks.ts new file mode 100644 index 000000000..9bc7e724d --- /dev/null +++ b/libs/providers/flagsmith/src/lib/flagsmith.mocks.ts @@ -0,0 +1,59 @@ +import type { BaseFlag } from 'flagsmith-nodejs'; + +export const mockFlagData = { + booleanAsStringEnabled: { + enabled: true, + value: 'true', + isDefault: false, + } as BaseFlag, + booleanDefault: { + enabled: true, + value: false, + isDefault: true, + } as BaseFlag, + booleanEnabled: { + enabled: true, + value: true, + isDefault: false, + } as BaseFlag, + booleanDisabled: { + enabled: false, + value: false, + isDefault: false, + } as BaseFlag, + stringDefault: { + enabled: true, + value: 'default-value', + isDefault: true, + } as BaseFlag, + stringFlag: { + enabled: true, + value: 'test-string-value', + isDefault: false, + } as BaseFlag, + numberAsStringFlag: { + enabled: true, + value: '42', + isDefault: false, + } as BaseFlag, + numberActual: { + enabled: true, + value: 123, + isDefault: false, + } as BaseFlag, + jsonValidFlag: { + enabled: true, + value: '{"key": "value", "nested": {"prop": true}}', + isDefault: false, + } as BaseFlag, + jsonInvalidFlag: { + enabled: true, + value: '{invalid json', + isDefault: false, + } as BaseFlag, + disabledFlag: { + enabled: false, + value: 'disabled-value', + isDefault: false, + } as BaseFlag, +}; diff --git a/libs/providers/flagsmith/src/lib/type-factory.ts b/libs/providers/flagsmith/src/lib/type-factory.ts new file mode 100644 index 000000000..b51fc5b28 --- /dev/null +++ b/libs/providers/flagsmith/src/lib/type-factory.ts @@ -0,0 +1,62 @@ +import type { FlagValue, JsonValue } from '@openfeature/server-sdk'; + +export type FlagType = 'string' | 'number' | 'object' | 'boolean'; + +const toNumber = (value: unknown): number | undefined => { + if (typeof value === 'number' && Number.isFinite(value)) return value; + const parsed = parseFloat(value as string); + return Number.isFinite(parsed) ? parsed : undefined; +}; + +const toBoolean = (value: unknown): boolean | undefined => { + if (typeof value === 'boolean') return value; + if (typeof value === 'number') { + if (value === 0) return false; + if (value === 1) return true; + return undefined; + } + if (typeof value === 'string') { + const lower = value.toLowerCase(); + if (lower === 'true') return true; + if (lower === 'false') return false; + } + return undefined; +}; + +const toObject = (value: unknown): JsonValue | undefined => { + if (typeof value === 'object') return value as JsonValue; + if (typeof value === 'string') { + try { + return JSON.parse(value); + } catch (error) { + return undefined; + } + } + return undefined; +}; + +/** + * Return a value of the specified type based on the type parameter. + * + * @param value - The value to be converted or validated. + * @param type - The target type for the conversion. + * @returns The converted value if successful, or null if conversion fails or the type is unsupported. + */ +export const typeFactory = ( + value: string | number | boolean | null | undefined, + type: FlagType, +): FlagValue | undefined => { + if (value === null || value === undefined || typeof value === 'undefined') return undefined; + switch (type) { + case 'string': + return String(value); + case 'number': + return toNumber(value); + case 'boolean': + return toBoolean(value); + case 'object': + return toObject(value); + default: + return undefined; + } +}; diff --git a/libs/providers/flagsmith/tsconfig.json b/libs/providers/flagsmith/tsconfig.json new file mode 100644 index 000000000..59959dcc7 --- /dev/null +++ b/libs/providers/flagsmith/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ES2020", + "moduleResolution": "node", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/libs/providers/flagsmith/tsconfig.lib.json b/libs/providers/flagsmith/tsconfig.lib.json new file mode 100644 index 000000000..cbec302d8 --- /dev/null +++ b/libs/providers/flagsmith/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.mocks.ts", "src/**/*.test.ts"] +} diff --git a/libs/providers/flagsmith/tsconfig.spec.json b/libs/providers/flagsmith/tsconfig.spec.json new file mode 100644 index 000000000..0523ac3c5 --- /dev/null +++ b/libs/providers/flagsmith/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.mocks.ts", "src/**/*.d.ts"] +} diff --git a/package-lock.json b/package-lock.json index 1b33a0e3c..6c14ad2dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "js-sdk-contrib", "version": "0.0.0", - "lockfileVersion": 3, + "lockfileVersion": 2, "requires": true, "packages": { "": { @@ -26,6 +26,7 @@ "axios": "1.12.0", "copy-anything": "^3.0.5", "flagsmith": "^9.3.1", + "flagsmith-nodejs": "^6.1.0", "imurmurhash": "^0.1.4", "json-logic-engine": "4.0.6", "launchdarkly-js-client-sdk": "^3.1.3", @@ -6691,7 +6692,6 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "dev": true, "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -7094,7 +7094,6 @@ }, "node_modules/atomic-sleep": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -9816,7 +9815,6 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9829,7 +9827,6 @@ }, "node_modules/events": { "version": "3.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -10084,7 +10081,6 @@ }, "node_modules/fast-redact": { "version": "3.5.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -10465,6 +10461,19 @@ "integrity": "sha512-dpU1U8fjLBf6uzuJuOHRGS2forpiHING0amCFtF9ych+Yeth4cYMy3ZT0cx0lhE7S4o2v9itU0fge+toP3Td6A==", "license": "BSD-3-Clause" }, + "node_modules/flagsmith-nodejs": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/flagsmith-nodejs/-/flagsmith-nodejs-6.1.0.tgz", + "integrity": "sha512-MCPsZajSvdJQBLJtxsMqkNbL1sfPDbG8jeZQQuOY9w6ov5BE7wCelBir7jNMu+CjhPY1NpdZfTp4PkQAFLISOg==", + "dependencies": { + "pino": "^8.8.0", + "semver": "^7.3.7", + "undici-types": "^6.19.8" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/flat": { "version": "5.0.2", "dev": true, @@ -11194,7 +11203,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -13710,7 +13718,6 @@ }, "node_modules/on-exit-leak-free": { "version": "2.1.2", - "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" @@ -14118,7 +14125,6 @@ }, "node_modules/pino": { "version": "8.17.2", - "dev": true, "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", @@ -14139,7 +14145,6 @@ }, "node_modules/pino-abstract-transport": { "version": "1.1.0", - "dev": true, "license": "MIT", "dependencies": { "readable-stream": "^4.0.0", @@ -14148,7 +14153,6 @@ }, "node_modules/pino-abstract-transport/node_modules/buffer": { "version": "6.0.3", - "dev": true, "funding": [ { "type": "github", @@ -14171,7 +14175,6 @@ }, "node_modules/pino-abstract-transport/node_modules/readable-stream": { "version": "4.7.0", - "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -14186,12 +14189,10 @@ }, "node_modules/pino-std-serializers": { "version": "6.2.2", - "dev": true, "license": "MIT" }, "node_modules/pino/node_modules/process-warning": { "version": "3.0.0", - "dev": true, "license": "MIT" }, "node_modules/pirates": { @@ -14874,7 +14875,6 @@ }, "node_modules/process": { "version": "0.11.10", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6.0" @@ -15088,7 +15088,6 @@ }, "node_modules/quick-format-unescaped": { "version": "4.0.4", - "dev": true, "license": "MIT" }, "node_modules/quick-lru": { @@ -15163,7 +15162,6 @@ }, "node_modules/real-require": { "version": "0.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 12.13.0" @@ -15582,7 +15580,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -15622,7 +15619,6 @@ }, "node_modules/safe-stable-stringify": { "version": "2.5.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -15671,7 +15667,6 @@ }, "node_modules/semver": { "version": "7.7.2", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -15924,7 +15919,6 @@ }, "node_modules/sonic-boom": { "version": "3.8.0", - "dev": true, "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -15992,7 +15986,6 @@ }, "node_modules/split2": { "version": "4.2.0", - "dev": true, "license": "ISC", "engines": { "node": ">= 10.x" @@ -16125,7 +16118,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -16441,7 +16433,6 @@ }, "node_modules/thread-stream": { "version": "2.7.0", - "dev": true, "license": "MIT", "dependencies": { "real-require": "^0.2.0" @@ -17886,5 +17877,11208 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@aws-crypto/sha256-browser": { + "version": "5.2.0", + "requires": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } + } + }, + "@aws-crypto/sha256-js": { + "version": "5.2.0", + "requires": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@aws-crypto/util": { + "version": "5.2.0", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } + } + }, + "@aws-sdk/client-ssm": { + "version": "3.759.0", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/credential-provider-node": "3.758.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.758.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.5", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-retry": "^4.0.7", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.7", + "@smithy/util-defaults-mode-node": "^4.0.7", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.2", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1" + } + } + }, + "@aws-sdk/client-sso": { + "version": "3.758.0", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.758.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.5", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-retry": "^4.0.7", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.7", + "@smithy/util-defaults-mode-node": "^4.0.7", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/core": { + "version": "3.758.0", + "requires": { + "@aws-sdk/types": "3.734.0", + "@smithy/core": "^3.1.5", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/signature-v4": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.758.0", + "requires": { + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-http": { + "version": "3.758.0", + "requires": { + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.758.0", + "requires": { + "@aws-sdk/core": "3.758.0", + "@aws-sdk/credential-provider-env": "3.758.0", + "@aws-sdk/credential-provider-http": "3.758.0", + "@aws-sdk/credential-provider-process": "3.758.0", + "@aws-sdk/credential-provider-sso": "3.758.0", + "@aws-sdk/credential-provider-web-identity": "3.758.0", + "@aws-sdk/nested-clients": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.758.0", + "requires": { + "@aws-sdk/credential-provider-env": "3.758.0", + "@aws-sdk/credential-provider-http": "3.758.0", + "@aws-sdk/credential-provider-ini": "3.758.0", + "@aws-sdk/credential-provider-process": "3.758.0", + "@aws-sdk/credential-provider-sso": "3.758.0", + "@aws-sdk/credential-provider-web-identity": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.758.0", + "requires": { + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.758.0", + "requires": { + "@aws-sdk/client-sso": "3.758.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/token-providers": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.758.0", + "requires": { + "@aws-sdk/core": "3.758.0", + "@aws-sdk/nested-clients": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.734.0", + "requires": { + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.734.0", + "requires": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.734.0", + "requires": { + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.758.0", + "requires": { + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@smithy/core": "^3.1.5", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/nested-clients": { + "version": "3.758.0", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.758.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.5", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-retry": "^4.0.7", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.7", + "@smithy/util-defaults-mode-node": "^4.0.7", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/region-config-resolver": { + "version": "3.734.0", + "requires": { + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/token-providers": { + "version": "3.758.0", + "requires": { + "@aws-sdk/nested-clients": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/types": { + "version": "3.734.0", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.743.0", + "requires": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "@smithy/util-endpoints": "^3.0.1", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.723.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.734.0", + "requires": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.758.0", + "requires": { + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@babel/code-frame": { + "version": "7.26.2", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.26.8", + "dev": true + }, + "@babel/core": { + "version": "7.26.10", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.26.10", + "dev": true, + "requires": { + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.26.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.26.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.26.9", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.26.3", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-transforms": { + "version": "7.26.0", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.26.5", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.26.5", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.25.9", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helpers": { + "version": "7.26.10", + "dev": true, + "requires": { + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" + } + }, + "@babel/parser": { + "version": "7.26.10", + "dev": true, + "requires": { + "@babel/types": "^7.26.10" + } + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "dev": true, + "requires": {} + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "dev": true + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.26.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.26.10", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.26.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.26.8", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/preset-env": { + "version": "7.26.9", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.26.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + } + }, + "@babel/runtime": { + "version": "7.26.10", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.26.9", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + } + }, + "@babel/traverse": { + "version": "7.26.10", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.26.10", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@balena/dockerignore": { + "version": "1.0.2", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@bufbuild/buf": { + "version": "1.50.1", + "dev": true, + "requires": { + "@bufbuild/buf-darwin-arm64": "1.50.1", + "@bufbuild/buf-darwin-x64": "1.50.1", + "@bufbuild/buf-linux-aarch64": "1.50.1", + "@bufbuild/buf-linux-armv7": "1.50.1", + "@bufbuild/buf-linux-x64": "1.50.1", + "@bufbuild/buf-win32-arm64": "1.50.1", + "@bufbuild/buf-win32-x64": "1.50.1" + } + }, + "@bufbuild/buf-linux-x64": { + "version": "1.50.1", + "dev": true, + "optional": true + }, + "@bufbuild/protobuf": { + "version": "1.10.0" + }, + "@bundled-es-modules/cookie": { + "version": "2.0.1", + "dev": true, + "requires": { + "cookie": "^0.7.2" + } + }, + "@bundled-es-modules/statuses": { + "version": "1.0.1", + "dev": true, + "requires": { + "statuses": "^2.0.1" + } + }, + "@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "dev": true, + "requires": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, + "@configcat/sdk": { + "version": "1.0.1" + }, + "@connectrpc/connect": { + "version": "1.6.1", + "requires": {} + }, + "@connectrpc/connect-web": { + "version": "1.6.1", + "requires": {} + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@cucumber/gherkin": { + "version": "28.0.0", + "dev": true, + "requires": { + "@cucumber/messages": ">=19.1.4 <=24" + } + }, + "@cucumber/messages": { + "version": "24.1.0", + "dev": true, + "requires": { + "@types/uuid": "9.0.8", + "class-transformer": "0.5.1", + "reflect-metadata": "0.2.1", + "uuid": "9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "dev": true + } + } + }, + "@cypress/request": { + "version": "3.0.6", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.13.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "qs": { + "version": "6.13.0", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "tough-cookie": { + "version": "5.1.2", + "dev": true, + "requires": { + "tldts": "^6.1.32" + } + }, + "uuid": { + "version": "8.3.2", + "dev": true + } + } + }, + "@emnapi/core": { + "version": "1.3.1", + "dev": true, + "requires": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "@emnapi/runtime": { + "version": "1.3.1", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@emnapi/wasi-threads": { + "version": "1.0.1", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.5.1", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + } + }, + "@eslint-community/regexpp": { + "version": "4.12.1", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "globals": { + "version": "13.24.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.57.1", + "dev": true + }, + "@fastify/busboy": { + "version": "2.1.1", + "dev": true + }, + "@flipt-io/flipt": { + "version": "1.2.0" + }, + "@flipt-io/flipt-client-js": { + "version": "0.2.0", + "requires": { + "node-fetch": "^3.3.0" + }, + "dependencies": { + "node-fetch": { + "version": "3.3.2", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } + } + }, + "@growthbook/growthbook": { + "version": "1.4.1", + "requires": { + "dom-mutator": "^0.6.0" + } + }, + "@grpc/grpc-js": { + "version": "1.13.0", + "requires": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + } + }, + "@grpc/proto-loader": { + "version": "0.7.13", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + } + }, + "@humanwhocodes/config-array": { + "version": "0.13.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true + }, + "@inquirer/confirm": { + "version": "5.1.13", + "dev": true, + "requires": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" + } + }, + "@inquirer/core": { + "version": "10.1.14", + "dev": true, + "requires": { + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "dev": true + } + } + }, + "@inquirer/figures": { + "version": "1.0.12", + "dev": true + }, + "@inquirer/type": { + "version": "3.0.7", + "dev": true, + "requires": {} + }, + "@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.1.0", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jest/console": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/expect": { + "version": "29.7.0", + "dev": true, + "requires": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + } + }, + "@jest/expect-utils": { + "version": "29.7.0", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/reporters": { + "version": "29.7.0", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.6.3", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@js-sdsl/ordered-map": { + "version": "4.4.2" + }, + "@mswjs/interceptors": { + "version": "0.39.2", + "dev": true, + "requires": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + } + }, + "@napi-rs/nice": { + "version": "1.0.1", + "dev": true, + "optional": true, + "requires": { + "@napi-rs/nice-android-arm-eabi": "1.0.1", + "@napi-rs/nice-android-arm64": "1.0.1", + "@napi-rs/nice-darwin-arm64": "1.0.1", + "@napi-rs/nice-darwin-x64": "1.0.1", + "@napi-rs/nice-freebsd-x64": "1.0.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", + "@napi-rs/nice-linux-arm64-gnu": "1.0.1", + "@napi-rs/nice-linux-arm64-musl": "1.0.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", + "@napi-rs/nice-linux-s390x-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-musl": "1.0.1", + "@napi-rs/nice-win32-arm64-msvc": "1.0.1", + "@napi-rs/nice-win32-ia32-msvc": "1.0.1", + "@napi-rs/nice-win32-x64-msvc": "1.0.1" + } + }, + "@napi-rs/nice-linux-x64-gnu": { + "version": "1.0.1", + "dev": true, + "optional": true + }, + "@napi-rs/nice-linux-x64-musl": { + "version": "1.0.1", + "dev": true, + "optional": true + }, + "@napi-rs/wasm-runtime": { + "version": "0.2.4", + "dev": true, + "requires": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nx/devkit": { + "version": "20.3.1", + "dev": true, + "requires": { + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + } + }, + "@nx/eslint": { + "version": "20.3.1", + "dev": true, + "requires": { + "@nx/devkit": "20.3.1", + "@nx/js": "20.3.1", + "semver": "^7.5.3", + "tslib": "^2.3.0", + "typescript": "~5.6.2" + }, + "dependencies": { + "typescript": { + "version": "5.6.3", + "dev": true + } + } + }, + "@nx/eslint-plugin": { + "version": "20.3.1", + "dev": true, + "requires": { + "@nx/devkit": "20.3.1", + "@nx/js": "20.3.1", + "@typescript-eslint/type-utils": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0", + "chalk": "^4.1.0", + "confusing-browser-globals": "^1.0.9", + "globals": "^15.9.0", + "jsonc-eslint-parser": "^2.1.0", + "semver": "^7.5.3", + "tslib": "^2.3.0" + } + }, + "@nx/jest": { + "version": "20.3.1", + "dev": true, + "requires": { + "@jest/reporters": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@nx/devkit": "20.3.1", + "@nx/js": "20.3.1", + "@phenomnomnominal/tsquery": "~5.0.1", + "chalk": "^4.1.0", + "identity-obj-proxy": "3.0.0", + "jest-config": "^29.4.1", + "jest-resolve": "^29.4.1", + "jest-util": "^29.4.1", + "minimatch": "9.0.3", + "resolve.exports": "2.0.3", + "semver": "^7.5.3", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + } + }, + "@nx/js": { + "version": "20.3.1", + "dev": true, + "requires": { + "@babel/core": "^7.23.2", + "@babel/plugin-proposal-decorators": "^7.22.7", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/preset-typescript": "^7.22.5", + "@babel/runtime": "^7.22.6", + "@nx/devkit": "20.3.1", + "@nx/workspace": "20.3.1", + "@zkochan/js-yaml": "0.0.7", + "babel-plugin-const-enum": "^1.0.1", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-transform-typescript-metadata": "^0.3.1", + "chalk": "^4.1.0", + "columnify": "^1.6.0", + "detect-port": "^1.5.1", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "js-tokens": "^4.0.0", + "jsonc-parser": "3.2.0", + "minimatch": "9.0.3", + "npm-package-arg": "11.0.1", + "npm-run-path": "^4.0.1", + "ora": "5.3.0", + "semver": "^7.5.3", + "source-map-support": "0.5.19", + "tinyglobby": "^0.2.10", + "ts-node": "10.9.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0" + }, + "dependencies": { + "ts-node": { + "version": "10.9.1", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + } + } + }, + "@nx/nx-linux-x64-gnu": { + "version": "20.3.1", + "dev": true, + "optional": true + }, + "@nx/nx-linux-x64-musl": { + "version": "20.3.1", + "dev": true, + "optional": true + }, + "@nx/plugin": { + "version": "20.3.1", + "dev": true, + "requires": { + "@nx/devkit": "20.3.1", + "@nx/eslint": "20.3.1", + "@nx/jest": "20.3.1", + "@nx/js": "20.3.1", + "tslib": "^2.3.0" + } + }, + "@nx/rollup": { + "version": "20.3.1", + "dev": true, + "requires": { + "@nx/devkit": "20.3.1", + "@nx/js": "20.3.1", + "@rollup/plugin-babel": "^6.0.4", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-image": "^3.0.3", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-typescript": "^12.1.0", + "autoprefixer": "^10.4.9", + "minimatch": "9.0.3", + "picocolors": "^1.1.0", + "postcss": "^8.4.38", + "rollup": "^4.14.0", + "rollup-plugin-copy": "^3.5.0", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-typescript2": "^0.36.0", + "tslib": "^2.3.0" + } + }, + "@nx/web": { + "version": "20.3.1", + "dev": true, + "requires": { + "@nx/devkit": "20.3.1", + "@nx/js": "20.3.1", + "detect-port": "^1.5.1", + "http-server": "^14.1.0", + "picocolors": "^1.1.0", + "tslib": "^2.3.0" + } + }, + "@nx/workspace": { + "version": "20.3.1", + "dev": true, + "requires": { + "@nx/devkit": "20.3.1", + "chalk": "^4.1.0", + "enquirer": "~2.3.6", + "nx": "20.3.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + } + }, + "@open-draft/deferred-promise": { + "version": "2.2.0", + "dev": true + }, + "@open-draft/logger": { + "version": "0.3.0", + "dev": true, + "requires": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "@open-draft/until": { + "version": "2.1.0", + "dev": true + }, + "@openfeature/core": { + "version": "1.7.2", + "dev": true + }, + "@openfeature/server-sdk": { + "version": "1.17.1", + "dev": true, + "requires": {} + }, + "@openfeature/web-sdk": { + "version": "1.4.1", + "dev": true, + "requires": {} + }, + "@opentelemetry/api": { + "version": "1.9.0" + }, + "@opentelemetry/core": { + "version": "1.30.1", + "dev": true, + "requires": { + "@opentelemetry/semantic-conventions": "1.28.0" + } + }, + "@opentelemetry/resources": { + "version": "1.30.1", + "dev": true, + "requires": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + } + }, + "@opentelemetry/sdk-metrics": { + "version": "1.30.1", + "dev": true, + "requires": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "dev": true + }, + "@oxc-resolver/binding-linux-x64-gnu": { + "version": "5.0.0", + "dev": true, + "optional": true + }, + "@oxc-resolver/binding-linux-x64-musl": { + "version": "5.0.0", + "dev": true, + "optional": true + }, + "@phenomnomnominal/tsquery": { + "version": "5.0.1", + "dev": true, + "requires": { + "esquery": "^1.4.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "optional": true + }, + "@pkgr/core": { + "version": "0.1.1", + "dev": true + }, + "@protobuf-ts/grpc-transport": { + "version": "2.9.5", + "requires": { + "@protobuf-ts/runtime": "^2.9.5", + "@protobuf-ts/runtime-rpc": "^2.9.5" + } + }, + "@protobuf-ts/runtime": { + "version": "2.9.5" + }, + "@protobuf-ts/runtime-rpc": { + "version": "2.9.5", + "requires": { + "@protobuf-ts/runtime": "^2.9.5" + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2" + }, + "@protobufjs/base64": { + "version": "1.1.2" + }, + "@protobufjs/codegen": { + "version": "2.0.4" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2" + }, + "@protobufjs/inquire": { + "version": "1.1.0" + }, + "@protobufjs/path": { + "version": "1.1.2" + }, + "@protobufjs/pool": { + "version": "1.1.0" + }, + "@protobufjs/utf8": { + "version": "1.1.0" + }, + "@rollup/plugin-babel": { + "version": "6.0.4", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-commonjs": { + "version": "25.0.8", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "dependencies": { + "glob": { + "version": "8.1.0", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@rollup/plugin-image": { + "version": "3.0.3", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "mini-svg-data-uri": "^1.4.4" + } + }, + "@rollup/plugin-json": { + "version": "6.1.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.3.1", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + } + }, + "@rollup/plugin-typescript": { + "version": "12.1.2", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.1.4", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + } + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.36.0", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.36.0", + "dev": true, + "optional": true + }, + "@sec-ant/readable-stream": { + "version": "0.4.1", + "dev": true + }, + "@sinclair/typebox": { + "version": "0.27.8", + "dev": true + }, + "@sindresorhus/is": { + "version": "5.6.0", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.1", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@sinonjs/samsam": { + "version": "8.0.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + }, + "dependencies": { + "type-detect": { + "version": "4.1.0", + "dev": true + } + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.3", + "dev": true + }, + "@smithy/abort-controller": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/config-resolver": { + "version": "4.0.1", + "requires": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "tslib": "^2.6.2" + } + }, + "@smithy/core": { + "version": "3.1.5", + "requires": { + "@smithy/middleware-serde": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.1.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/credential-provider-imds": { + "version": "4.0.1", + "requires": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "tslib": "^2.6.2" + } + }, + "@smithy/fetch-http-handler": { + "version": "5.0.1", + "requires": { + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/hash-node": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/invalid-dependency": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/is-array-buffer": { + "version": "4.0.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-content-length": { + "version": "4.0.1", + "requires": { + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-endpoint": { + "version": "4.0.6", + "requires": { + "@smithy/core": "^3.1.5", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-retry": { + "version": "4.0.7", + "requires": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1" + } + } + }, + "@smithy/middleware-serde": { + "version": "4.0.2", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-stack": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/node-config-provider": { + "version": "4.0.1", + "requires": { + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/node-http-handler": { + "version": "4.0.3", + "requires": { + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/property-provider": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/protocol-http": { + "version": "5.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/querystring-builder": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/querystring-parser": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/service-error-classification": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0" + } + }, + "@smithy/shared-ini-file-loader": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/signature-v4": { + "version": "5.0.1", + "requires": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/smithy-client": { + "version": "4.1.6", + "requires": { + "@smithy/core": "^3.1.5", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", + "tslib": "^2.6.2" + } + }, + "@smithy/types": { + "version": "4.1.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/url-parser": { + "version": "4.0.1", + "requires": { + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-base64": { + "version": "4.0.0", + "requires": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-body-length-browser": { + "version": "4.0.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-body-length-node": { + "version": "4.0.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "4.0.0", + "requires": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-config-provider": { + "version": "4.0.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-defaults-mode-browser": { + "version": "4.0.7", + "requires": { + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-defaults-mode-node": { + "version": "4.0.7", + "requires": { + "@smithy/config-resolver": "^4.0.1", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-endpoints": { + "version": "3.0.1", + "requires": { + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-hex-encoding": { + "version": "4.0.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-middleware": { + "version": "4.0.1", + "requires": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-retry": { + "version": "4.0.1", + "requires": { + "@smithy/service-error-classification": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-stream": { + "version": "4.1.2", + "requires": { + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-uri-escape": { + "version": "4.0.0", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "4.0.0", + "requires": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-waiter": { + "version": "4.0.2", + "requires": { + "@smithy/abort-controller": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + } + }, + "@swc-node/core": { + "version": "1.13.3", + "dev": true, + "requires": {} + }, + "@swc-node/register": { + "version": "1.10.10", + "dev": true, + "requires": { + "@swc-node/core": "^1.13.3", + "@swc-node/sourcemap-support": "^0.5.1", + "colorette": "^2.0.20", + "debug": "^4.3.5", + "oxc-resolver": "^5.0.0", + "pirates": "^4.0.6", + "tslib": "^2.6.3" + } + }, + "@swc-node/sourcemap-support": { + "version": "0.5.1", + "dev": true, + "requires": { + "source-map-support": "^0.5.21", + "tslib": "^2.6.3" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "@swc/cli": { + "version": "0.7.7", + "dev": true, + "requires": { + "@swc/counter": "^0.1.3", + "@xhmikosr/bin-wrapper": "^13.0.5", + "commander": "^8.3.0", + "fast-glob": "^3.2.5", + "minimatch": "^9.0.3", + "piscina": "^4.3.1", + "semver": "^7.3.8", + "slash": "3.0.0", + "source-map": "^0.7.3" + } + }, + "@swc/core": { + "version": "1.12.9", + "dev": true, + "requires": { + "@swc/core-darwin-arm64": "1.12.9", + "@swc/core-darwin-x64": "1.12.9", + "@swc/core-linux-arm-gnueabihf": "1.12.9", + "@swc/core-linux-arm64-gnu": "1.12.9", + "@swc/core-linux-arm64-musl": "1.12.9", + "@swc/core-linux-x64-gnu": "1.12.9", + "@swc/core-linux-x64-musl": "1.12.9", + "@swc/core-win32-arm64-msvc": "1.12.9", + "@swc/core-win32-ia32-msvc": "1.12.9", + "@swc/core-win32-x64-msvc": "1.12.9", + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.23" + } + }, + "@swc/core-linux-x64-gnu": { + "version": "1.12.9", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.12.9", + "dev": true, + "optional": true + }, + "@swc/counter": { + "version": "0.1.3", + "dev": true + }, + "@swc/helpers": { + "version": "0.5.17", + "requires": { + "tslib": "^2.8.0" + } + }, + "@swc/types": { + "version": "0.1.23", + "dev": true, + "requires": { + "@swc/counter": "^0.1.3" + } + }, + "@szmarczak/http-timer": { + "version": "5.0.1", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.1" + } + }, + "@tokenizer/token": { + "version": "0.3.0", + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "dev": true + }, + "@trysound/sax": { + "version": "0.2.0", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.4", + "dev": true + }, + "@tybys/wasm-util": { + "version": "0.9.0", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@types/assert": { + "version": "1.5.11", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.6", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/cookie": { + "version": "0.6.0", + "dev": true + }, + "@types/docker-modem": { + "version": "3.0.6", + "dev": true, + "requires": { + "@types/node": "*", + "@types/ssh2": "*" + } + }, + "@types/dockerode": { + "version": "3.3.35", + "dev": true, + "requires": { + "@types/docker-modem": "*", + "@types/node": "*", + "@types/ssh2": "*" + } + }, + "@types/estree": { + "version": "1.0.6", + "dev": true + }, + "@types/events": { + "version": "3.0.3", + "dev": true + }, + "@types/fs-extra": { + "version": "8.1.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.9", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.4", + "dev": true + }, + "@types/imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.14", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/jsdom": { + "version": "20.0.1", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "@types/lodash": { + "version": "4.17.16", + "dev": true + }, + "@types/lodash.isempty": { + "version": "4.4.9", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/lodash.isequal": { + "version": "4.5.8", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/minimatch": { + "version": "5.1.2", + "dev": true + }, + "@types/node": { + "version": "22.13.10", + "requires": { + "undici-types": "~6.20.0" + } + }, + "@types/object-hash": { + "version": "3.0.6", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.2", + "dev": true + }, + "@types/resolve": { + "version": "1.20.2", + "dev": true + }, + "@types/semver": { + "version": "7.5.8", + "dev": true + }, + "@types/sinon": { + "version": "17.0.4", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.5", + "dev": true + }, + "@types/ssh2": { + "version": "1.15.4", + "dev": true, + "requires": { + "@types/node": "^18.11.18" + }, + "dependencies": { + "@types/node": { + "version": "18.19.80", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "undici-types": { + "version": "5.26.5", + "dev": true + } + } + }, + "@types/ssh2-streams": { + "version": "0.1.12", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.3", + "dev": true + }, + "@types/statuses": { + "version": "2.0.5", + "dev": true + }, + "@types/tough-cookie": { + "version": "4.0.5", + "dev": true + }, + "@types/uuid": { + "version": "9.0.8" + }, + "@types/yargs": { + "version": "17.0.33", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "dependencies": { + "@typescript-eslint/type-utils": { + "version": "7.18.0", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/utils": { + "version": "7.18.0", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "7.18.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "7.18.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "8.26.1", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "8.26.1", + "@typescript-eslint/utils": "8.26.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "8.26.1", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.26.1", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/visitor-keys": "8.26.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.26.1", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.26.1", + "eslint-visitor-keys": "^4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ts-api-utils": { + "version": "2.0.1", + "dev": true, + "requires": {} + } + } + }, + "@typescript-eslint/types": { + "version": "7.18.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "dependencies": { + "minimatch": { + "version": "9.0.5", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "8.26.1", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.26.1", + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/typescript-estree": "8.26.1" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "8.26.1", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/visitor-keys": "8.26.1" + } + }, + "@typescript-eslint/types": { + "version": "8.26.1", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.26.1", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/visitor-keys": "8.26.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.26.1", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.26.1", + "eslint-visitor-keys": "^4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ts-api-utils": { + "version": "2.0.1", + "dev": true, + "requires": {} + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + } + }, + "@ungap/structured-clone": { + "version": "1.3.0", + "dev": true + }, + "@verdaccio/auth": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/config": "8.0.0-next-8.1", + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/loaders": "8.0.0-next-8.1", + "@verdaccio/logger": "8.0.0-next-8.1", + "@verdaccio/signature": "8.0.0-next-8.0", + "@verdaccio/utils": "7.0.1-next-8.1", + "debug": "4.3.7", + "lodash": "4.17.21", + "verdaccio-htpasswd": "13.0.0-next-8.1" + }, + "dependencies": { + "@verdaccio/file-locking": { + "version": "13.0.0-next-8.0", + "dev": true, + "requires": { + "lockfile": "1.0.4" + } + }, + "core-js": { + "version": "3.37.1", + "dev": true + }, + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "verdaccio-htpasswd": { + "version": "13.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/file-locking": "13.0.0-next-8.0", + "apache-md5": "1.1.8", + "bcryptjs": "2.4.3", + "core-js": "3.37.1", + "debug": "4.3.7", + "http-errors": "2.0.0", + "unix-crypt-td-js": "1.1.4" + } + } + } + }, + "@verdaccio/commons-api": { + "version": "10.2.0", + "dev": true, + "requires": { + "http-errors": "2.0.0", + "http-status-codes": "2.2.0" + }, + "dependencies": { + "http-status-codes": { + "version": "2.2.0", + "dev": true + } + } + }, + "@verdaccio/config": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/utils": "7.0.1-next-8.1", + "debug": "4.3.7", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "minimatch": "7.4.6" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "7.4.6", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@verdaccio/core": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "ajv": "8.17.1", + "core-js": "3.37.1", + "http-errors": "2.0.0", + "http-status-codes": "2.3.0", + "process-warning": "1.0.0", + "semver": "7.6.3" + }, + "dependencies": { + "core-js": { + "version": "3.37.1", + "dev": true + }, + "semver": { + "version": "7.6.3", + "dev": true + } + } + }, + "@verdaccio/file-locking": { + "version": "10.3.1", + "dev": true, + "requires": { + "lockfile": "1.0.4" + } + }, + "@verdaccio/loaders": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/logger": "8.0.0-next-8.1", + "debug": "4.3.7", + "lodash": "4.17.21" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "@verdaccio/local-storage-legacy": { + "version": "11.0.2", + "dev": true, + "requires": { + "@verdaccio/commons-api": "10.2.0", + "@verdaccio/file-locking": "10.3.1", + "@verdaccio/streams": "10.2.1", + "async": "3.2.4", + "debug": "4.3.4", + "lodash": "4.17.21", + "lowdb": "1.0.0", + "mkdirp": "1.0.4" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@verdaccio/logger": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/logger-commons": "8.0.0-next-8.1", + "pino": "8.17.2" + } + }, + "@verdaccio/logger-7": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/logger-commons": "8.0.0-next-8.1", + "pino": "7.11.0" + }, + "dependencies": { + "duplexify": { + "version": "4.1.3", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "on-exit-leak-free": { + "version": "0.2.0", + "dev": true + }, + "pino": { + "version": "7.11.0", + "dev": true, + "requires": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + } + }, + "pino-abstract-transport": { + "version": "0.5.0", + "dev": true, + "requires": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "pino-std-serializers": { + "version": "4.0.0", + "dev": true + }, + "real-require": { + "version": "0.1.0", + "dev": true + }, + "sonic-boom": { + "version": "2.8.0", + "dev": true, + "requires": { + "atomic-sleep": "^1.0.0" + } + }, + "thread-stream": { + "version": "0.15.2", + "dev": true, + "requires": { + "real-require": "^0.1.0" + } + } + } + }, + "@verdaccio/logger-commons": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/logger-prettify": "8.0.0-next-8.0", + "colorette": "2.0.20", + "debug": "4.3.7" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "@verdaccio/logger-prettify": { + "version": "8.0.0-next-8.0", + "dev": true, + "requires": { + "colorette": "2.0.20", + "dayjs": "1.11.13", + "lodash": "4.17.21", + "pino-abstract-transport": "1.1.0", + "sonic-boom": "3.8.0" + } + }, + "@verdaccio/middleware": { + "version": "8.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/config": "8.0.0-next-8.1", + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/url": "13.0.0-next-8.1", + "@verdaccio/utils": "7.0.1-next-8.1", + "debug": "4.3.7", + "express": "4.21.0", + "express-rate-limit": "5.5.1", + "lodash": "4.17.21", + "lru-cache": "7.18.3", + "mime": "2.6.0" + }, + "dependencies": { + "cookie": { + "version": "0.6.0", + "dev": true + }, + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "express": { + "version": "4.21.0", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.10", + "dev": true + }, + "qs": { + "version": "6.13.0", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "send": { + "version": "0.19.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "mime": { + "version": "1.6.0", + "dev": true + } + } + } + } + }, + "@verdaccio/search-indexer": { + "version": "8.0.0-next-8.0", + "dev": true + }, + "@verdaccio/signature": { + "version": "8.0.0-next-8.0", + "dev": true, + "requires": { + "debug": "4.3.7", + "jsonwebtoken": "9.0.2" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "@verdaccio/streams": { + "version": "10.2.1", + "dev": true + }, + "@verdaccio/tarball": { + "version": "13.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/url": "13.0.0-next-8.1", + "@verdaccio/utils": "7.0.1-next-8.1", + "debug": "4.3.7", + "gunzip-maybe": "^1.4.2", + "lodash": "4.17.21", + "tar-stream": "^3.1.7" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "@verdaccio/ui-theme": { + "version": "8.0.0-next-8.1", + "dev": true + }, + "@verdaccio/url": { + "version": "13.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/core": "8.0.0-next-8.1", + "debug": "4.3.7", + "lodash": "4.17.21", + "validator": "13.12.0" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "@verdaccio/utils": { + "version": "7.0.1-next-8.1", + "dev": true, + "requires": { + "@verdaccio/core": "8.0.0-next-8.1", + "lodash": "4.17.21", + "minimatch": "7.4.6", + "semver": "7.6.3" + }, + "dependencies": { + "minimatch": { + "version": "7.4.6", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.6.3", + "dev": true + } + } + }, + "@xhmikosr/archive-type": { + "version": "7.0.0", + "dev": true, + "requires": { + "file-type": "^19.0.0" + } + }, + "@xhmikosr/bin-check": { + "version": "7.0.3", + "dev": true, + "requires": { + "execa": "^5.1.1", + "isexe": "^2.0.0" + } + }, + "@xhmikosr/bin-wrapper": { + "version": "13.0.5", + "dev": true, + "requires": { + "@xhmikosr/bin-check": "^7.0.3", + "@xhmikosr/downloader": "^15.0.1", + "@xhmikosr/os-filter-obj": "^3.0.0", + "bin-version-check": "^5.1.0" + } + }, + "@xhmikosr/decompress": { + "version": "10.0.1", + "dev": true, + "requires": { + "@xhmikosr/decompress-tar": "^8.0.1", + "@xhmikosr/decompress-tarbz2": "^8.0.1", + "@xhmikosr/decompress-targz": "^8.0.1", + "@xhmikosr/decompress-unzip": "^7.0.0", + "graceful-fs": "^4.2.11", + "make-dir": "^4.0.0", + "strip-dirs": "^3.0.0" + } + }, + "@xhmikosr/decompress-tar": { + "version": "8.0.1", + "dev": true, + "requires": { + "file-type": "^19.0.0", + "is-stream": "^2.0.1", + "tar-stream": "^3.1.7" + } + }, + "@xhmikosr/decompress-tarbz2": { + "version": "8.0.2", + "dev": true, + "requires": { + "@xhmikosr/decompress-tar": "^8.0.1", + "file-type": "^19.6.0", + "is-stream": "^2.0.1", + "seek-bzip": "^2.0.0", + "unbzip2-stream": "^1.4.3" + } + }, + "@xhmikosr/decompress-targz": { + "version": "8.0.1", + "dev": true, + "requires": { + "@xhmikosr/decompress-tar": "^8.0.1", + "file-type": "^19.0.0", + "is-stream": "^2.0.1" + } + }, + "@xhmikosr/decompress-unzip": { + "version": "7.0.0", + "dev": true, + "requires": { + "file-type": "^19.0.0", + "get-stream": "^6.0.1", + "yauzl": "^3.1.2" + } + }, + "@xhmikosr/downloader": { + "version": "15.0.1", + "dev": true, + "requires": { + "@xhmikosr/archive-type": "^7.0.0", + "@xhmikosr/decompress": "^10.0.1", + "content-disposition": "^0.5.4", + "defaults": "^3.0.0", + "ext-name": "^5.0.0", + "file-type": "^19.0.0", + "filenamify": "^6.0.0", + "get-stream": "^6.0.1", + "got": "^13.0.0" + } + }, + "@xhmikosr/os-filter-obj": { + "version": "3.0.0", + "dev": true, + "requires": { + "arch": "^3.0.0" + } + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true + }, + "@yarnpkg/parsers": { + "version": "3.0.2", + "dev": true, + "requires": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + } + }, + "@zkochan/js-yaml": { + "version": "0.0.7", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "abab": { + "version": "2.0.6", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "dependencies": { + "negotiator": { + "version": "0.6.3", + "dev": true + } + } + }, + "acorn": { + "version": "8.14.1", + "dev": true + }, + "acorn-globals": { + "version": "7.0.1", + "dev": true, + "requires": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.3.4", + "dev": true, + "requires": { + "acorn": "^8.11.0" + } + }, + "address": { + "version": "1.2.2", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "8.17.1", + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "dev": true + } + } + }, + "apache-md5": { + "version": "1.1.8", + "dev": true + }, + "arch": { + "version": "3.0.0", + "dev": true + }, + "archiver": { + "version": "7.0.1", + "dev": true, + "requires": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "readable-stream": { + "version": "4.7.0", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "archiver-utils": { + "version": "5.0.2", + "dev": true, + "requires": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "glob": { + "version": "10.4.5", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "minimatch": { + "version": "9.0.5", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "readable-stream": { + "version": "4.7.0", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "arg": { + "version": "4.1.3", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "2.1.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true + }, + "async": { + "version": "3.2.6", + "dev": true + }, + "async-lock": { + "version": "1.4.1", + "dev": true + }, + "asynckit": { + "version": "0.4.0" + }, + "atomic-sleep": { + "version": "1.0.0" + }, + "autoprefixer": { + "version": "10.4.21", + "dev": true, + "requires": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.7", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "aws-sdk-client-mock": { + "version": "4.1.0", + "dev": true, + "requires": { + "@types/sinon": "^17.0.3", + "sinon": "^18.0.1", + "tslib": "^2.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true + }, + "aws4": { + "version": "1.13.2", + "dev": true + }, + "axios": { + "version": "1.12.0", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "axios-mock-adapter": { + "version": "2.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.5" + } + }, + "b4a": { + "version": "1.6.7", + "dev": true + }, + "babel-helper-evaluate-path": { + "version": "0.5.0", + "dev": true + }, + "babel-helper-flip-expressions": { + "version": "0.4.3", + "dev": true + }, + "babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "dev": true + }, + "babel-helper-is-void-0": { + "version": "0.4.3", + "dev": true + }, + "babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "dev": true + }, + "babel-helper-remove-or-void": { + "version": "0.4.3", + "dev": true + }, + "babel-helper-to-multiple-sequence-expressions": { + "version": "0.5.0", + "dev": true + }, + "babel-jest": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-const-enum": { + "version": "1.2.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.3.3", + "@babel/traverse": "^7.16.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "babel-plugin-minify-builtins": { + "version": "0.5.0", + "dev": true + }, + "babel-plugin-minify-constant-folding": { + "version": "0.5.0", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "babel-plugin-minify-dead-code-elimination": { + "version": "0.5.2", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-mark-eval-scopes": "^0.4.3", + "babel-helper-remove-or-void": "^0.4.3", + "lodash": "^4.17.11" + } + }, + "babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "dev": true, + "requires": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "babel-plugin-minify-guarded-expressions": { + "version": "0.4.4", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3" + } + }, + "babel-plugin-minify-infinity": { + "version": "0.4.3", + "dev": true + }, + "babel-plugin-minify-mangle-names": { + "version": "0.5.1", + "dev": true, + "requires": { + "babel-helper-mark-eval-scopes": "^0.4.3" + } + }, + "babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "dev": true + }, + "babel-plugin-minify-replace": { + "version": "0.5.0", + "dev": true + }, + "babel-plugin-minify-simplify": { + "version": "0.5.1", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.5.0" + } + }, + "babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "dev": true, + "requires": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + } + }, + "babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "dev": true + }, + "babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "dev": true + }, + "babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.5", + "dev": true + }, + "babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "dev": true + }, + "babel-plugin-transform-property-literals": { + "version": "6.9.4", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "dev": true + }, + "babel-plugin-transform-remove-console": { + "version": "6.9.4", + "dev": true + }, + "babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "dev": true + }, + "babel-plugin-transform-remove-undefined": { + "version": "0.5.0", + "dev": true, + "requires": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "dev": true + }, + "babel-plugin-transform-typescript-metadata": { + "version": "0.3.2", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "dev": true + }, + "babel-preset-current-node-syntax": { + "version": "1.1.0", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-preset-minify": { + "version": "0.5.2", + "dev": true, + "requires": { + "babel-plugin-minify-builtins": "^0.5.0", + "babel-plugin-minify-constant-folding": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.2", + "babel-plugin-minify-flip-comparisons": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.4", + "babel-plugin-minify-infinity": "^0.4.3", + "babel-plugin-minify-mangle-names": "^0.5.1", + "babel-plugin-minify-numeric-literals": "^0.4.3", + "babel-plugin-minify-replace": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.1", + "babel-plugin-minify-type-constructors": "^0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", + "babel-plugin-transform-member-expression-literals": "^6.9.4", + "babel-plugin-transform-merge-sibling-variables": "^6.9.5", + "babel-plugin-transform-minify-booleans": "^6.9.4", + "babel-plugin-transform-property-literals": "^6.9.4", + "babel-plugin-transform-regexp-constructors": "^0.4.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-remove-debugger": "^6.9.4", + "babel-plugin-transform-remove-undefined": "^0.5.0", + "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "lodash": "^4.17.11" + } + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "bare-events": { + "version": "2.5.4", + "dev": true, + "optional": true + }, + "bare-fs": { + "version": "4.0.1", + "dev": true, + "optional": true, + "requires": { + "bare-events": "^2.0.0", + "bare-path": "^3.0.0", + "bare-stream": "^2.0.0" + } + }, + "bare-os": { + "version": "3.6.0", + "dev": true, + "optional": true + }, + "bare-path": { + "version": "3.0.0", + "dev": true, + "optional": true, + "requires": { + "bare-os": "^3.0.1" + } + }, + "bare-stream": { + "version": "2.6.5", + "dev": true, + "optional": true, + "requires": { + "streamx": "^2.21.0" + } + }, + "base64-js": { + "version": "1.5.1" + }, + "basic-auth": { + "version": "2.0.1", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bcryptjs": { + "version": "2.4.3", + "dev": true + }, + "bin-version": { + "version": "6.0.0", + "dev": true, + "requires": { + "execa": "^5.0.0", + "find-versions": "^5.0.0" + } + }, + "bin-version-check": { + "version": "5.1.0", + "dev": true, + "requires": { + "bin-version": "^6.0.0", + "semver": "^7.5.3", + "semver-truncate": "^3.0.0" + } + }, + "bl": { + "version": "4.1.0", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "body-parser": { + "version": "1.20.3", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "qs": { + "version": "6.13.0", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + } + } + }, + "boolbase": { + "version": "1.0.0", + "dev": true + }, + "bowser": { + "version": "2.11.0" + }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "dev": true, + "requires": { + "pako": "~0.2.0" + } + }, + "browserslist": { + "version": "4.24.4", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + } + }, + "bs-logger": { + "version": "0.2.6", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "1.0.0", + "dev": true + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "buildcheck": { + "version": "0.0.6", + "dev": true, + "optional": true + }, + "byline": { + "version": "5.0.0", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "cacheable-lookup": { + "version": "7.0.0", + "dev": true + }, + "cacheable-request": { + "version": "10.2.14", + "dev": true, + "requires": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + } + }, + "call-bind": { + "version": "1.0.8", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001705", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "dev": true + }, + "chownr": { + "version": "1.1.4", + "dev": true + }, + "ci-info": { + "version": "3.9.0", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.4.3", + "dev": true + }, + "class-transformer": { + "version": "0.5.1", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "dev": true + }, + "cli-width": { + "version": "4.1.0", + "dev": true + }, + "clipanion": { + "version": "4.0.0-rc.4", + "dev": true, + "requires": { + "typanion": "^3.8.0" + } + }, + "cliui": { + "version": "8.0.1", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "dev": true + }, + "co": { + "version": "4.6.0", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.2", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "colord": { + "version": "2.9.3", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "dev": true + }, + "columnify": { + "version": "1.6.0", + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "8.3.0", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compress-commons": { + "version": "6.0.2", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "readable-stream": { + "version": "4.7.0", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "compressible": { + "version": "2.0.18", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.5", + "dev": true, + "requires": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "confusing-browser-globals": { + "version": "1.0.11", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "dev": true + }, + "cookie": { + "version": "0.7.2", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "copy-anything": { + "version": "3.0.5", + "requires": { + "is-what": "^4.1.8" + } + }, + "core-js": { + "version": "3.41.0", + "dev": true + }, + "core-js-compat": { + "version": "3.41.0", + "dev": true, + "requires": { + "browserslist": "^4.24.4" + } + }, + "core-util-is": { + "version": "1.0.2", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "corser": { + "version": "2.0.1", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "cpu-features": { + "version": "0.0.10", + "dev": true, + "optional": true, + "requires": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + } + }, + "crc-32": { + "version": "1.2.2", + "dev": true + }, + "crc32-stream": { + "version": "6.0.0", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "readable-stream": { + "version": "4.7.0", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "create-jest": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, + "create-require": { + "version": "1.1.1", + "dev": true + }, + "cross-fetch": { + "version": "3.2.0", + "dev": true, + "requires": { + "node-fetch": "^2.7.0" + } + }, + "cross-spawn": { + "version": "7.0.6", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-declaration-sorter": { + "version": "6.4.1", + "dev": true, + "requires": {} + }, + "css-select": { + "version": "4.3.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "css-what": { + "version": "6.1.0", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "dev": true + }, + "cssnano": { + "version": "5.1.15", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "cssom": { + "version": "0.5.0", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "4.0.1" + }, + "data-urls": { + "version": "3.0.2", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "whatwg-url": { + "version": "11.0.0", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, + "dayjs": { + "version": "1.11.13", + "dev": true + }, + "debug": { + "version": "4.4.0", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "decimal.js": { + "version": "10.5.0", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "dev": true + }, + "defaults": { + "version": "3.0.0", + "dev": true + }, + "defer-to-connect": { + "version": "2.0.1", + "dev": true + }, + "define-data-property": { + "version": "1.1.4", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0" + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "detect-port": { + "version": "1.6.1", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "4" + } + }, + "diff": { + "version": "4.0.2", + "dev": true + }, + "diff-sequences": { + "version": "29.6.3", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "docker-compose": { + "version": "0.24.8", + "dev": true, + "requires": { + "yaml": "^2.2.2" + }, + "dependencies": { + "yaml": { + "version": "2.7.0", + "dev": true + } + } + }, + "docker-modem": { + "version": "5.0.6", + "dev": true, + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + } + }, + "dockerode": { + "version": "4.0.5", + "dev": true, + "requires": { + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.6", + "protobufjs": "^7.3.2", + "tar-fs": "~2.1.2", + "uuid": "^10.0.0" + }, + "dependencies": { + "tar-fs": { + "version": "2.1.2", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + } + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-mutator": { + "version": "0.6.0" + }, + "dom-serializer": { + "version": "1.4.1", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "dev": true + }, + "domexception": { + "version": "4.0.0", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dotenv": { + "version": "16.4.7", + "dev": true + }, + "dotenv-expand": { + "version": "11.0.7", + "dev": true, + "requires": { + "dotenv": "^16.4.5" + } + }, + "dunder-proto": { + "version": "1.0.1", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "duplexify": { + "version": "3.7.1", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "ejs": { + "version": "3.1.10", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.5.119", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0" + }, + "encodeurl": { + "version": "2.0.0", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "4.5.0", + "dev": true + }, + "envinfo": { + "version": "7.14.0", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.1" + }, + "es-errors": { + "version": "1.3.0" + }, + "es-object-atoms": { + "version": "1.1.1", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "escalade": { + "version": "3.2.0" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0" + }, + "escodegen": { + "version": "2.1.0", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "8.57.1", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "globals": { + "version": "13.24.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "9.1.0", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "5.2.3", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + } + }, + "eslint-scope": { + "version": "7.2.2", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "dev": true + }, + "espree": { + "version": "9.6.1", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.6.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "event-target-shim": { + "version": "5.0.1" + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0" + }, + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "dev": true + }, + "expect": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "express": { + "version": "4.21.1", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.7.1", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "path-to-regexp": { + "version": "0.1.10", + "dev": true + }, + "qs": { + "version": "6.13.0", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "send": { + "version": "0.19.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "encodeurl": { + "version": "1.0.2", + "dev": true + } + } + } + } + }, + "express-rate-limit": { + "version": "5.5.1", + "dev": true + }, + "ext-list": { + "version": "2.2.2", + "dev": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "dev": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3" + }, + "fast-diff": { + "version": "1.3.0", + "dev": true + }, + "fast-fifo": { + "version": "1.3.2", + "dev": true + }, + "fast-glob": { + "version": "3.3.3", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fast-redact": { + "version": "3.5.0" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "dev": true + }, + "fast-uri": { + "version": "3.0.6" + }, + "fast-xml-parser": { + "version": "4.4.1", + "requires": { + "strnum": "^1.0.5" + } + }, + "fastq": { + "version": "1.19.1", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.2", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fdir": { + "version": "6.4.3", + "dev": true, + "requires": {} + }, + "fetch-blob": { + "version": "3.2.0", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "fetch-mock": { + "version": "9.11.0", + "dev": true, + "requires": { + "@babel/core": "^7.0.0", + "@babel/runtime": "^7.0.0", + "core-js": "^3.0.0", + "debug": "^4.1.1", + "glob-to-regexp": "^0.4.0", + "is-subset": "^0.1.1", + "lodash.isequal": "^4.5.0", + "path-to-regexp": "^2.2.1", + "querystring": "^0.2.0", + "whatwg-url": "^6.5.0" + } + }, + "fetch-mock-jest": { + "version": "1.5.1", + "dev": true, + "requires": { + "fetch-mock": "^9.11.0" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-type": { + "version": "19.6.0", + "dev": true, + "requires": { + "get-stream": "^9.0.1", + "strtok3": "^9.0.1", + "token-types": "^6.0.0", + "uint8array-extras": "^1.3.0" + }, + "dependencies": { + "get-stream": { + "version": "9.0.1", + "dev": true, + "requires": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + } + }, + "is-stream": { + "version": "4.0.1", + "dev": true + } + } + }, + "filelist": { + "version": "1.0.4", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "filename-reserved-regex": { + "version": "3.0.0", + "dev": true + }, + "filenamify": { + "version": "6.0.0", + "dev": true, + "requires": { + "filename-reserved-regex": "^3.0.0" + } + }, + "fill-range": { + "version": "7.1.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.3.1", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.1", + "dev": true + } + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "find-versions": { + "version": "5.1.0", + "dev": true, + "requires": { + "semver-regex": "^4.0.5" + } + }, + "flagsmith": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/flagsmith/-/flagsmith-9.3.2.tgz", + "integrity": "sha512-dpU1U8fjLBf6uzuJuOHRGS2forpiHING0amCFtF9ych+Yeth4cYMy3ZT0cx0lhE7S4o2v9itU0fge+toP3Td6A==" + }, + "flagsmith-nodejs": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/flagsmith-nodejs/-/flagsmith-nodejs-6.1.0.tgz", + "integrity": "sha512-MCPsZajSvdJQBLJtxsMqkNbL1sfPDbG8jeZQQuOY9w6ov5BE7wCelBir7jNMu+CjhPY1NpdZfTp4PkQAFLISOg==", + "requires": { + "pino": "^8.8.0", + "semver": "^7.3.7", + "undici-types": "^6.19.8" + } + }, + "flat": { + "version": "5.0.2", + "dev": true + }, + "flat-cache": { + "version": "3.2.0", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.3.3", + "dev": true + }, + "follow-redirects": { + "version": "1.15.9" + }, + "for-each": { + "version": "0.3.5", + "dev": true, + "requires": { + "is-callable": "^1.2.7" + } + }, + "foreground-child": { + "version": "3.3.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "dev": true + } + } + }, + "forever-agent": { + "version": "0.6.1", + "dev": true + }, + "form-data": { + "version": "4.0.4", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + }, + "form-data-encoder": { + "version": "2.1.4", + "dev": true + }, + "formdata-polyfill": { + "version": "4.0.10", + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fraction.js": { + "version": "4.3.7", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "front-matter": { + "version": "4.0.2", + "dev": true, + "requires": { + "js-yaml": "^3.13.1" + } + }, + "fs-constants": { + "version": "1.0.0", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "function-bind": { + "version": "1.1.2" + }, + "generic-names": { + "version": "4.0.0", + "dev": true, + "requires": { + "loader-utils": "^3.2.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.3.0", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-port": { + "version": "7.1.0", + "dev": true + }, + "get-proto": { + "version": "1.0.1", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "globals": { + "version": "15.15.0", + "dev": true + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.2.0" + }, + "got": { + "version": "13.0.0", + "dev": true, + "requires": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "dev": true + }, + "graphql": { + "version": "16.10.0", + "dev": true + }, + "gunzip-maybe": { + "version": "1.4.2", + "dev": true, + "requires": { + "browserify-zlib": "^0.1.4", + "is-deflate": "^1.0.0", + "is-gzip": "^1.0.0", + "peek-stream": "^1.1.0", + "pumpify": "^1.3.3", + "through2": "^2.0.3" + } + }, + "handlebars": { + "version": "4.7.8", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "harmony-reflect": { + "version": "1.6.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0" + }, + "has-tostringtag": { + "version": "1.0.2", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "dev": true + }, + "headers-polyfill": { + "version": "4.0.3", + "dev": true + }, + "hosted-git-info": { + "version": "7.0.2", + "dev": true, + "requires": { + "lru-cache": "^10.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "dev": true + } + } + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.1", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-server": { + "version": "14.1.1", + "dev": true, + "requires": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + } + }, + "http-signature": { + "version": "1.4.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + } + }, + "http-status-codes": { + "version": "2.3.0", + "dev": true + }, + "http2-wrapper": { + "version": "2.2.1", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "dev": true + }, + "icss-utils": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "identity-obj-proxy": { + "version": "3.0.0", + "dev": true, + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.3.2", + "dev": true + }, + "import-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "3.3.1", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "dev": true + } + } + }, + "import-from": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "import-local": { + "version": "3.2.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4" + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "inspect-with-kind": { + "version": "1.0.5", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true + }, + "is-arguments": { + "version": "1.2.0", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "dev": true + }, + "is-core-module": { + "version": "2.16.1", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-deflate": { + "version": "1.0.0", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-generator-fn": { + "version": "2.1.0", + "dev": true + }, + "is-generator-function": { + "version": "1.1.0", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + } + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-gzip": { + "version": "1.0.0", + "dev": true + }, + "is-interactive": { + "version": "1.0.0", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-nan": { + "version": "1.3.2", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-node-process": { + "version": "1.2.0", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "dev": true + }, + "is-plain-object": { + "version": "3.0.1", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true + }, + "is-promise": { + "version": "2.2.2", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.2.1", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "dev": true + }, + "is-typed-array": { + "version": "1.1.15", + "dev": true, + "requires": { + "which-typed-array": "^1.1.16" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "dev": true + }, + "is-what": { + "version": "4.1.16" + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.7", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "3.4.3", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jake": { + "version": "10.9.2", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "jest": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + } + }, + "jest-changed-files": { + "version": "29.7.0", + "dev": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "babel-plugin-macros": { + "version": "3.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "cosmiconfig": { + "version": "7.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "dedent": { + "version": "1.5.3", + "dev": true, + "requires": {} + } + } + }, + "jest-cli": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.7.0", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-cucumber": { + "version": "4.5.0", + "dev": true, + "requires": { + "@cucumber/gherkin": "^28.0.0", + "callsites": "^3.0.0", + "glob": "^10.3.10", + "uuid": "^10.0.0" + }, + "dependencies": { + "glob": { + "version": "10.4.5", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "minimatch": { + "version": "9.0.5", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "jest-diff": { + "version": "29.7.0", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-jsdom": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + } + }, + "jest-environment-node": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-fetch-mock": { + "version": "3.0.3", + "dev": true, + "requires": { + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" + } + }, + "jest-get-type": { + "version": "29.6.3", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.6.3", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "dev": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "jest-runtime": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + } + }, + "jest-util": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "dev": true + } + } + }, + "jest-validate": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-websocket-mock": { + "version": "2.5.0", + "dev": true, + "requires": { + "jest-diff": "^29.2.0", + "mock-socket": "^9.3.0" + } + }, + "jest-worker": { + "version": "29.7.0", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + } + } + }, + "jsbn": { + "version": "0.1.1", + "dev": true + }, + "jsdom": { + "version": "20.0.3", + "dev": true, + "requires": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "whatwg-url": { + "version": "11.0.0", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, + "jsesc": { + "version": "3.1.0", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "dev": true + }, + "json-logic-engine": { + "version": "4.0.6" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true + }, + "json5": { + "version": "2.2.3", + "dev": true + }, + "jsonc-eslint-parser": { + "version": "2.4.0", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + } + }, + "jsonc-parser": { + "version": "3.2.0", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsonwebtoken": { + "version": "9.0.2", + "dev": true, + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + } + }, + "jsprim": { + "version": "2.0.2", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "just-extend": { + "version": "6.2.0", + "dev": true + }, + "jwa": { + "version": "1.4.1", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "keyv": { + "version": "4.5.4", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "dev": true + }, + "launchdarkly-js-client-sdk": { + "version": "3.5.0", + "requires": { + "escape-string-regexp": "^4.0.0", + "launchdarkly-js-sdk-common": "5.4.0" + } + }, + "launchdarkly-js-sdk-common": { + "version": "5.4.0", + "requires": { + "base64-js": "^1.3.0", + "fast-deep-equal": "^2.0.1", + "uuid": "^8.0.0" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1" + }, + "uuid": { + "version": "8.3.2" + } + } + }, + "lazystream": { + "version": "1.0.1", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "leven": { + "version": "3.1.0", + "dev": true + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "dev": true + }, + "lines-and-columns": { + "version": "2.0.3", + "dev": true + }, + "loader-utils": { + "version": "3.3.1", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lockfile": { + "version": "1.0.4", + "dev": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0" + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "dev": true + }, + "lodash.includes": { + "version": "4.3.0", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "dev": true + }, + "lodash.isempty": { + "version": "4.4.0" + }, + "lodash.isequal": { + "version": "4.5.0" + }, + "lodash.isinteger": { + "version": "4.0.4", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "long": { + "version": "5.3.1" + }, + "lowdb": { + "version": "1.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3", + "is-promise": "^2.1.0", + "lodash": "4", + "pify": "^3.0.0", + "steno": "^0.4.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "lowercase-keys": { + "version": "3.0.0", + "dev": true + }, + "lru-cache": { + "version": "11.0.2" + }, + "magic-string": { + "version": "0.30.17", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "make-dir": { + "version": "4.0.0", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "make-error": { + "version": "1.3.6", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "math-intrinsics": { + "version": "1.1.0" + }, + "mdn-data": { + "version": "2.0.14", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.3", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "micromatch": { + "version": "4.0.8", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "dev": true + }, + "mime-db": { + "version": "1.53.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0" + } + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "mimic-response": { + "version": "4.0.0", + "dev": true + }, + "mini-svg-data-uri": { + "version": "1.4.4", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "minipass": { + "version": "7.1.2", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "dev": true + }, + "mock-socket": { + "version": "9.3.1", + "dev": true + }, + "ms": { + "version": "2.1.3", + "dev": true + }, + "msw": { + "version": "2.10.3", + "dev": true, + "requires": { + "@bundled-es-modules/cookie": "^2.0.1", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.39.1", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.26.1", + "yargs": "^17.7.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "6.3.0", + "dev": true + }, + "type-fest": { + "version": "4.41.0", + "dev": true + } + } + }, + "mute-stream": { + "version": "2.0.0", + "dev": true + }, + "nan": { + "version": "2.22.2", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.10", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "dev": true + }, + "negotiator": { + "version": "0.6.4", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "nise": { + "version": "6.1.1", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", + "just-extend": "^6.2.0", + "path-to-regexp": "^8.1.0" + }, + "dependencies": { + "@sinonjs/fake-timers": { + "version": "13.0.5", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1" + } + }, + "path-to-regexp": { + "version": "8.2.0", + "dev": true + } + } + }, + "node-domexception": { + "version": "1.0.0" + }, + "node-fetch": { + "version": "2.7.0", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "dev": true + }, + "node-machine-id": { + "version": "1.1.12", + "dev": true + }, + "node-releases": { + "version": "2.0.19", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "dev": true + }, + "normalize-url": { + "version": "8.0.1", + "dev": true + }, + "npm-package-arg": { + "version": "11.0.1", + "dev": true, + "requires": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.18", + "dev": true + }, + "nx": { + "version": "20.3.1", + "dev": true, + "requires": { + "@napi-rs/wasm-runtime": "0.2.4", + "@nx/nx-darwin-arm64": "20.3.1", + "@nx/nx-darwin-x64": "20.3.1", + "@nx/nx-freebsd-x64": "20.3.1", + "@nx/nx-linux-arm-gnueabihf": "20.3.1", + "@nx/nx-linux-arm64-gnu": "20.3.1", + "@nx/nx-linux-arm64-musl": "20.3.1", + "@nx/nx-linux-x64-gnu": "20.3.1", + "@nx/nx-linux-x64-musl": "20.3.1", + "@nx/nx-win32-arm64-msvc": "20.3.1", + "@nx/nx-win32-x64-msvc": "20.3.1", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "resolve.exports": "2.0.3", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "dependencies": { + "tar-stream": { + "version": "2.2.0", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "yaml": { + "version": "2.7.0", + "dev": true + } + } + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-hash": { + "version": "3.0.0" + }, + "object-inspect": { + "version": "1.13.4", + "dev": true + }, + "object-is": { + "version": "1.1.6", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + } + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.7", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + } + }, + "on-exit-leak-free": { + "version": "2.1.2" + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "dev": true + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opener": { + "version": "1.5.2", + "dev": true + }, + "optionator": { + "version": "0.9.4", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + } + }, + "ora": { + "version": "5.3.0", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "outvariant": { + "version": "1.4.3", + "dev": true + }, + "oxc-resolver": { + "version": "5.0.0", + "dev": true, + "requires": { + "@oxc-resolver/binding-darwin-arm64": "5.0.0", + "@oxc-resolver/binding-darwin-x64": "5.0.0", + "@oxc-resolver/binding-freebsd-x64": "5.0.0", + "@oxc-resolver/binding-linux-arm-gnueabihf": "5.0.0", + "@oxc-resolver/binding-linux-arm64-gnu": "5.0.0", + "@oxc-resolver/binding-linux-arm64-musl": "5.0.0", + "@oxc-resolver/binding-linux-x64-gnu": "5.0.0", + "@oxc-resolver/binding-linux-x64-musl": "5.0.0", + "@oxc-resolver/binding-wasm32-wasi": "5.0.0", + "@oxc-resolver/binding-win32-arm64-msvc": "5.0.0", + "@oxc-resolver/binding-win32-x64-msvc": "5.0.0" + } + }, + "p-cancelable": { + "version": "3.0.0", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-queue": { + "version": "6.6.2", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "package-json-from-dist": { + "version": "1.0.1", + "dev": true + }, + "pako": { + "version": "0.2.9", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "dependencies": { + "lines-and-columns": { + "version": "1.2.4", + "dev": true + } + } + }, + "parse5": { + "version": "7.2.1", + "dev": true, + "requires": { + "entities": "^4.5.0" + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-scurry": { + "version": "1.11.1", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "dev": true + } + } + }, + "path-to-regexp": { + "version": "2.4.0", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "peek-readable": { + "version": "5.4.2", + "dev": true + }, + "peek-stream": { + "version": "1.1.3", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" + } + }, + "pend": { + "version": "1.2.0", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "dev": true + }, + "picomatch": { + "version": "4.0.2", + "dev": true + }, + "pify": { + "version": "5.0.0", + "dev": true + }, + "pino": { + "version": "8.17.2", + "requires": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.1.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.0.0" + }, + "dependencies": { + "process-warning": { + "version": "3.0.0" + } + } + }, + "pino-abstract-transport": { + "version": "1.1.0", + "requires": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "readable-stream": { + "version": "4.7.0", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "pino-std-serializers": { + "version": "6.2.2" + }, + "pirates": { + "version": "4.0.6", + "dev": true + }, + "piscina": { + "version": "4.9.0", + "dev": true, + "requires": { + "@napi-rs/nice": "^1.0.1" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pkginfo": { + "version": "0.4.1", + "dev": true + }, + "portfinder": { + "version": "1.0.35", + "dev": true, + "requires": { + "async": "^3.2.6", + "debug": "^4.3.6" + } + }, + "possible-typed-array-names": { + "version": "1.1.0", + "dev": true + }, + "postcss": { + "version": "8.5.3", + "dev": true, + "requires": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-calc": { + "version": "8.2.4", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.1", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "dev": true, + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "dev": true, + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "postcss-load-config": { + "version": "3.1.4", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.4", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules": { + "version": "4.3.1", + "dev": true, + "requires": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.1.0", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.2.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, + "postcss-modules-scope": { + "version": "3.2.1", + "dev": true, + "requires": { + "postcss-selector-parser": "^7.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "normalize-url": { + "version": "6.1.0", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.2", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.1.2", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "prettier": { + "version": "3.5.3", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "29.7.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } + }, + "proc-log": { + "version": "3.0.0", + "dev": true + }, + "process": { + "version": "0.11.10" + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "process-warning": { + "version": "1.0.0", + "dev": true + }, + "promise-polyfill": { + "version": "8.3.0", + "dev": true + }, + "promise.series": { + "version": "0.2.0", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proper-lockfile": { + "version": "4.1.2", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "properties-reader": { + "version": "2.3.0", + "dev": true, + "requires": { + "mkdirp": "^1.0.4" + } + }, + "protobufjs": { + "version": "7.4.0", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-from-env": { + "version": "1.1.0" + }, + "psl": { + "version": "1.15.0", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } + }, + "pump": { + "version": "3.0.2", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.3.1", + "dev": true + }, + "pure-rand": { + "version": "6.1.0", + "dev": true + }, + "qs": { + "version": "6.14.0", + "dev": true, + "requires": { + "side-channel": "^1.1.0" + } + }, + "querystring": { + "version": "0.2.1", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "quick-format-unescaped": { + "version": "4.0.4" + }, + "quick-lru": { + "version": "5.1.1", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "18.3.1", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-glob": { + "version": "1.1.3", + "dev": true, + "requires": { + "minimatch": "^5.1.0" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "real-require": { + "version": "0.2.0" + }, + "reflect-metadata": { + "version": "0.2.1", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.2.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "6.2.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsgen": { + "version": "0.8.0", + "dev": true + }, + "regjsparser": { + "version": "0.12.0", + "dev": true, + "requires": { + "jsesc": "~3.0.2" + }, + "dependencies": { + "jsesc": { + "version": "3.0.2", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2" + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.10", + "dev": true, + "requires": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-alpn": { + "version": "1.2.1", + "dev": true + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "resolve.exports": { + "version": "2.0.3", + "dev": true + }, + "responselike": { + "version": "3.0.0", + "dev": true, + "requires": { + "lowercase-keys": "^3.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "dev": true + }, + "reusify": { + "version": "1.1.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "4.36.0", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.36.0", + "@rollup/rollup-android-arm64": "4.36.0", + "@rollup/rollup-darwin-arm64": "4.36.0", + "@rollup/rollup-darwin-x64": "4.36.0", + "@rollup/rollup-freebsd-arm64": "4.36.0", + "@rollup/rollup-freebsd-x64": "4.36.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.36.0", + "@rollup/rollup-linux-arm-musleabihf": "4.36.0", + "@rollup/rollup-linux-arm64-gnu": "4.36.0", + "@rollup/rollup-linux-arm64-musl": "4.36.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.36.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.36.0", + "@rollup/rollup-linux-riscv64-gnu": "4.36.0", + "@rollup/rollup-linux-s390x-gnu": "4.36.0", + "@rollup/rollup-linux-x64-gnu": "4.36.0", + "@rollup/rollup-linux-x64-musl": "4.36.0", + "@rollup/rollup-win32-arm64-msvc": "4.36.0", + "@rollup/rollup-win32-ia32-msvc": "4.36.0", + "@rollup/rollup-win32-x64-msvc": "4.36.0", + "@types/estree": "1.0.6", + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-copy": { + "version": "3.5.0", + "dev": true, + "requires": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "dependencies": { + "colorette": { + "version": "1.4.0", + "dev": true + }, + "globby": { + "version": "10.0.1", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + } + } + }, + "rollup-plugin-postcss": { + "version": "4.0.2", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" + } + }, + "rollup-plugin-typescript2": { + "version": "0.36.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "dev": true + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-identifier": { + "version": "0.4.2", + "dev": true + }, + "safe-regex-test": { + "version": "1.1.0", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + } + }, + "safe-stable-stringify": { + "version": "2.5.0" + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "saxes": { + "version": "6.0.0", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "secure-compare": { + "version": "3.0.1", + "dev": true + }, + "seek-bzip": { + "version": "2.0.0", + "dev": true, + "requires": { + "commander": "^6.0.0" + }, + "dependencies": { + "commander": { + "version": "6.2.1", + "dev": true + } + } + }, + "semver": { + "version": "7.7.2" + }, + "semver-regex": { + "version": "4.0.5", + "dev": true + }, + "semver-truncate": { + "version": "3.0.0", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "serve-static": { + "version": "1.16.2", + "dev": true, + "requires": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "send": { + "version": "0.19.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "encodeurl": { + "version": "1.0.2", + "dev": true + } + } + } + } + }, + "set-function-length": { + "version": "1.2.2", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "side-channel": { + "version": "1.1.0", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "sinon": { + "version": "18.0.1", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.2.0", + "nise": "^6.0.0", + "supports-color": "^7" + }, + "dependencies": { + "@sinonjs/fake-timers": { + "version": "11.2.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "diff": { + "version": "5.2.0", + "dev": true + } + } + }, + "sisteransi": { + "version": "1.0.5", + "dev": true + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "sonic-boom": { + "version": "3.8.0", + "requires": { + "atomic-sleep": "^1.0.0" + } + }, + "sort-keys": { + "version": "1.1.2", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "dev": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, + "source-map": { + "version": "0.7.4", + "dev": true + }, + "source-map-js": { + "version": "1.2.1", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "split-ca": { + "version": "1.0.1", + "dev": true + }, + "split2": { + "version": "4.2.0" + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "ssh-remote-port-forward": { + "version": "1.0.4", + "dev": true, + "requires": { + "@types/ssh2": "^0.5.48", + "ssh2": "^1.4.0" + }, + "dependencies": { + "@types/ssh2": { + "version": "0.5.52", + "dev": true, + "requires": { + "@types/node": "*", + "@types/ssh2-streams": "*" + } + } + } + }, + "ssh2": { + "version": "1.16.0", + "dev": true, + "requires": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.10", + "nan": "^2.20.0" + } + }, + "sshpk": { + "version": "1.18.0", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stable": { + "version": "0.1.8", + "dev": true + }, + "stack-utils": { + "version": "2.0.6", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.1", + "dev": true + }, + "steno": { + "version": "0.4.4", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3" + } + }, + "stream-shift": { + "version": "1.0.3", + "dev": true + }, + "streamx": { + "version": "2.22.0", + "dev": true, + "requires": { + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "strict-event-emitter": { + "version": "0.5.1", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-hash": { + "version": "1.1.3", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "dev": true + }, + "strip-dirs": { + "version": "3.0.0", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.5", + "is-plain-obj": "^1.1.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "strnum": { + "version": "1.1.2" + }, + "strtok3": { + "version": "9.1.1", + "dev": true, + "requires": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.3.1" + } + }, + "style-inject": { + "version": "0.3.0", + "dev": true + }, + "stylehacks": { + "version": "5.1.1", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true + } + } + }, + "symbol-tree": { + "version": "3.2.4", + "dev": true + }, + "synckit": { + "version": "0.9.2", + "dev": true, + "requires": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + } + }, + "tar-fs": { + "version": "3.0.8", + "dev": true, + "requires": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "tar-stream": { + "version": "3.1.7", + "dev": true, + "requires": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "testcontainers": { + "version": "10.28.0", + "dev": true, + "requires": { + "@balena/dockerignore": "^1.0.2", + "@types/dockerode": "^3.3.35", + "archiver": "^7.0.1", + "async-lock": "^1.4.1", + "byline": "^5.0.0", + "debug": "^4.3.5", + "docker-compose": "^0.24.8", + "dockerode": "^4.0.5", + "get-port": "^7.1.0", + "proper-lockfile": "^4.1.2", + "properties-reader": "^2.3.0", + "ssh-remote-port-forward": "^1.0.4", + "tar-fs": "^3.0.7", + "tmp": "^0.2.3", + "undici": "^5.29.0" + } + }, + "text-decoder": { + "version": "1.2.3", + "dev": true, + "requires": { + "b4a": "^1.6.4" + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "thread-stream": { + "version": "2.7.0", + "requires": { + "real-require": "^0.2.0" + } + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "tiny-emitter": { + "version": "2.1.0" + }, + "tinyglobby": { + "version": "0.2.12", + "dev": true, + "requires": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + } + }, + "tldts": { + "version": "6.1.84", + "dev": true, + "requires": { + "tldts-core": "^6.1.84" + } + }, + "tldts-core": { + "version": "6.1.84", + "dev": true + }, + "tmp": { + "version": "0.2.3", + "dev": true + }, + "tmpl": { + "version": "1.0.5", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "token-types": { + "version": "6.0.0", + "dev": true, + "requires": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + } + }, + "tough-cookie": { + "version": "4.1.4", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "ts-api-utils": { + "version": "1.4.3", + "dev": true, + "requires": {} + }, + "ts-jest": { + "version": "29.4.0", + "dev": true, + "requires": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.2", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "type-fest": { + "version": "4.41.0", + "dev": true + } + } + }, + "ts-node": { + "version": "10.9.2", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "tsconfig-paths": { + "version": "4.2.0", + "dev": true, + "requires": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "dev": true + } + } + }, + "tslib": { + "version": "2.8.1" + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "dev": true + }, + "typanion": { + "version": "3.14.0", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "5.8.3", + "dev": true + }, + "uglify-js": { + "version": "3.19.3", + "dev": true, + "optional": true + }, + "uint8array-extras": { + "version": "1.4.0", + "dev": true + }, + "unbzip2-stream": { + "version": "1.4.3", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "undici": { + "version": "5.29.0", + "dev": true, + "requires": { + "@fastify/busboy": "^2.0.0" + } + }, + "undici-types": { + "version": "6.20.0" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true + }, + "union": { + "version": "0.5.0", + "dev": true, + "requires": { + "qs": "^6.4.0" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unix-crypt-td-js": { + "version": "1.1.4", + "dev": true + }, + "unleash-proxy-client": { + "version": "3.7.3", + "requires": { + "tiny-emitter": "^2.1.0", + "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1" + } + } + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.3", + "dev": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-join": { + "version": "4.0.1", + "dev": true + }, + "url-parse": { + "version": "1.5.10", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "util": { + "version": "0.12.5", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "10.0.0", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.3.0", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.1", + "dev": true + }, + "validator": { + "version": "13.12.0", + "dev": true + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "verdaccio": { + "version": "5.33.0", + "dev": true, + "requires": { + "@cypress/request": "3.0.6", + "@verdaccio/auth": "8.0.0-next-8.1", + "@verdaccio/config": "8.0.0-next-8.1", + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/local-storage-legacy": "11.0.2", + "@verdaccio/logger-7": "8.0.0-next-8.1", + "@verdaccio/middleware": "8.0.0-next-8.1", + "@verdaccio/search-indexer": "8.0.0-next-8.0", + "@verdaccio/signature": "8.0.0-next-8.0", + "@verdaccio/streams": "10.2.1", + "@verdaccio/tarball": "13.0.0-next-8.1", + "@verdaccio/ui-theme": "8.0.0-next-8.1", + "@verdaccio/url": "13.0.0-next-8.1", + "@verdaccio/utils": "7.0.1-next-8.1", + "async": "3.2.6", + "clipanion": "4.0.0-rc.4", + "compression": "1.7.5", + "cors": "2.8.5", + "debug": "^4.3.7", + "envinfo": "7.14.0", + "express": "4.21.1", + "express-rate-limit": "5.5.1", + "fast-safe-stringify": "2.1.1", + "handlebars": "4.7.8", + "js-yaml": "4.1.0", + "JSONStream": "1.3.5", + "jsonwebtoken": "9.0.2", + "kleur": "4.1.5", + "lodash": "4.17.21", + "lru-cache": "7.18.3", + "mime": "3.0.0", + "mkdirp": "1.0.4", + "mv": "2.1.1", + "pkginfo": "0.4.1", + "semver": "7.6.3", + "validator": "13.12.0", + "verdaccio-audit": "13.0.0-next-8.1", + "verdaccio-htpasswd": "13.0.0-next-8.1" + }, + "dependencies": { + "@verdaccio/file-locking": { + "version": "13.0.0-next-8.0", + "dev": true, + "requires": { + "lockfile": "1.0.4" + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "core-js": { + "version": "3.37.1", + "dev": true + }, + "debug": { + "version": "4.3.7", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "glob": { + "version": "6.0.4", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "kleur": { + "version": "4.1.5", + "dev": true + }, + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "mime": { + "version": "3.0.0", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mv": { + "version": "2.1.1", + "dev": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + } + } + }, + "rimraf": { + "version": "2.4.5", + "dev": true, + "requires": { + "glob": "^6.0.1" + } + }, + "semver": { + "version": "7.6.3", + "dev": true + }, + "verdaccio-htpasswd": { + "version": "13.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/core": "8.0.0-next-8.1", + "@verdaccio/file-locking": "13.0.0-next-8.0", + "apache-md5": "1.1.8", + "bcryptjs": "2.4.3", + "core-js": "3.37.1", + "debug": "4.3.7", + "http-errors": "2.0.0", + "unix-crypt-td-js": "1.1.4" + } + } + } + }, + "verdaccio-audit": { + "version": "13.0.0-next-8.1", + "dev": true, + "requires": { + "@verdaccio/config": "8.0.0-next-8.1", + "@verdaccio/core": "8.0.0-next-8.1", + "express": "4.21.0", + "https-proxy-agent": "5.0.1", + "node-fetch": "cjs" + }, + "dependencies": { + "cookie": { + "version": "0.6.0", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "express": { + "version": "4.21.0", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "path-to-regexp": { + "version": "0.1.10", + "dev": true + }, + "qs": { + "version": "6.13.0", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "send": { + "version": "0.19.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "encodeurl": { + "version": "1.0.2", + "dev": true + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "verror": { + "version": "1.10.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-xmlserializer": { + "version": "4.0.0", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "walker": { + "version": "1.0.8", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "wcwidth": { + "version": "1.0.1", + "dev": true, + "requires": { + "defaults": "^1.0.3" + }, + "dependencies": { + "defaults": { + "version": "1.0.4", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + } + } + }, + "web-streams-polyfill": { + "version": "3.3.3" + }, + "webidl-conversions": { + "version": "7.0.0", + "dev": true + }, + "whatwg-encoding": { + "version": "2.0.0", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + }, + "dependencies": { + "webidl-conversions": { + "version": "4.0.2", + "dev": true + } + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-typed-array": { + "version": "1.1.19", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + }, + "word-wrap": { + "version": "1.2.5", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.2", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "8.18.1", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "dev": true + }, + "y18n": { + "version": "5.0.8" + }, + "yallist": { + "version": "3.1.1", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1" + }, + "yauzl": { + "version": "3.2.0", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "dependencies": { + "buffer-crc32": { + "version": "0.2.13", + "dev": true + } + } + }, + "yn": { + "version": "3.1.1", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true + }, + "yoctocolors-cjs": { + "version": "2.1.2", + "dev": true + }, + "zip-stream": { + "version": "6.0.1", + "dev": true, + "requires": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "readable-stream": { + "version": "4.7.0", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + } } } diff --git a/package.json b/package.json index 4bbe7cbd3..4820e23d3 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "axios": "1.12.0", "copy-anything": "^3.0.5", "flagsmith": "^9.3.1", + "flagsmith-nodejs": "^6.1.0", "imurmurhash": "^0.1.4", "json-logic-engine": "4.0.6", "launchdarkly-js-client-sdk": "^3.1.3", diff --git a/release-please-config.json b/release-please-config.json index 05ac57ed5..749f66592 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -64,9 +64,7 @@ "bump-minor-pre-major": true, "bump-patch-for-minor-pre-major": true, "versioning": "default", - "extra-files": [ - "src/lib/launchdarkly-client-provider.ts" - ] + "extra-files": ["src/lib/launchdarkly-client-provider.ts"] }, "libs/providers/go-feature-flag-web": { "release-type": "node", @@ -165,6 +163,13 @@ "bump-minor-pre-major": true, "bump-patch-for-minor-pre-major": true, "versioning": "default" + }, + "libs/providers/flagsmith-provider": { + "release-type": "node", + "prerelease": false, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true, + "versioning": "default" } }, "changelog-sections": [ diff --git a/tsconfig.base.json b/tsconfig.base.json index 1788b25fb..97270c5ff 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -26,6 +26,7 @@ "@openfeature/flagd-core": ["libs/shared/flagd-core/src/index.ts"], "@openfeature/flagd-provider": ["libs/providers/flagd/src/index.ts"], "@openfeature/flagsmith-client-provider": ["libs/shared/flagsmith-client/src/index.ts"], + "@openfeature/flagsmith-provider": ["libs/providers/flagsmith/src/index.ts"], "@openfeature/flipt-provider": ["libs/providers/flipt/src/index.ts"], "@openfeature/flipt-web-provider": ["libs/providers/flipt-web/src/index.ts"], "@openfeature/go-feature-flag-provider": ["libs/providers/go-feature-flag/src/index.ts"],