diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d2f4131..6689f80c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,17 +15,19 @@ jobs: main: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v6 with: node-version: 22 - cache: 'npm' + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest # This line enables distribution # The "--stop-agents-after" is optional, but allows idle agents to shut down once the "e2e-ci" targets have been requested # - run: npx nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="e2e-ci" - - run: npm ci + - run: bun install --frozen-lockfile - uses: nrwl/nx-set-shas@v4 diff --git a/.gitignore b/.gitignore index dd70d7db..04f4044d 100644 --- a/.gitignore +++ b/.gitignore @@ -141,7 +141,4 @@ vite.config.*.timestamp* .github/instructions/nx.instructions.md vitest.config.*.timestamp* -secrets - -bun.lock -bun.lockb \ No newline at end of file +secrets \ No newline at end of file diff --git a/bun.lock b/bun.lock new file mode 100644 index 00000000..306cad0b --- /dev/null +++ b/bun.lock @@ -0,0 +1,4655 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "abapify", + "dependencies": { + "@cloudfoundry/api": "^0.1.7", + "@nx/devkit": "22.1.1", + "@sap/cds-dk": "^8.4.0", + "@sap/xsenv": "^5.4.0", + "@xmldom/xmldom": "^0.9.5", + "axios": "^1.7.7", + "dset": "^3.1.4", + "fast-xml-parser": "^5.3.1", + "fxmlp": "^1.0.7", + "nx-mcp": "^0.6.3", + "open": "^10.2.0", + "openid-client": "^6.6.4", + "qs": "^6.13.1", + "reflect-metadata": "^0.2.2", + "ts-morph": "^27.0.2", + "yaml": "^2.6.0", + "zod": "^4.1.13", + }, + "devDependencies": { + "@cap-js/cds-types": "^0.7.0", + "@eslint/js": "^9.8.0", + "@nx/eslint": "22.1.1", + "@nx/eslint-plugin": "22.1.1", + "@nx/jest": "22.1.1", + "@nx/js": "22.1.1", + "@nx/node": "22.1.1", + "@nx/plugin": "22.1.1", + "@nx/rollup": "22.1.1", + "@nx/vite": "22.1.1", + "@nx/web": "22.1.1", + "@swc-node/register": "~1.9.1", + "@swc/cli": "0.6.0", + "@swc/core": "~1.13.5", + "@swc/helpers": "~0.5.11", + "@swc/jest": "0.2.39", + "@types/jest": "30.0.0", + "@types/js-yaml": "^4.0.5", + "@types/node": "^22.19.0", + "@typescript-eslint/parser": "^8.44.0", + "@typescript/native-preview": "^7.0.0-dev.20251108.1", + "@vitest/coverage-v8": "^3.0.5", + "@vitest/ui": "^3.0.0", + "eslint": "^9.8.0", + "eslint-config-prettier": "10.1.5", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-unused-imports": "^4.2.0", + "husky": "^9.1.6", + "jest": "30.0.5", + "jest-environment-jsdom": "30.0.5", + "jest-environment-node": "^30.0.2", + "jest-util": "30.0.5", + "jiti": "2.4.2", + "jsonc-eslint-parser": "^2.1.0", + "knip": "^5.71.0", + "nx": "22.1.1", + "pino-pretty": "^10.3.1", + "prettier": "^2.6.2", + "rollup": "^4.14.0", + "swc-loader": "0.1.15", + "ts-jest": "29.4.1", + "ts-node": "10.9.1", + "tsdown": "^0.16.7", + "tslib": "^2.3.0", + "tsx": "^4.19.2", + "typescript": "^5.9.3", + "typescript-eslint": "8.43.0", + "verdaccio": "6.1.2", + "vite": "7.1.5", + "vitest": "^3.2.4", + }, + }, + "packages/adk": { + "name": "@abapify/adk", + "version": "0.0.1", + "dependencies": { + "@abapify/adt-client": "*", + }, + }, + "packages/adt-auth": { + "name": "@abapify/adt-auth", + "version": "0.1.0", + "dependencies": { + "@abapify/logger": "*", + "proxy-agent": "^6.4.0", + }, + }, + "packages/adt-cli": { + "name": "@abapify/adt-cli", + "version": "0.0.1", + "bin": { + "adt": "./dist/bin/adt.mjs", + }, + "dependencies": { + "@abapify/adk": "*", + "@abapify/adt-auth": "*", + "@abapify/adt-client": "*", + "@abapify/adt-config": "*", + "@abapify/adt-contracts": "*", + "@abapify/adt-plugin-abapgit": "*", + "@abapify/adt-tui": "*", + "@abapify/logger": "*", + "@inquirer/prompts": "^7.9.0", + "chalk": "^5.6.2", + "commander": "^12.0.0", + "fast-xml-parser": "^5.3.1", + "ink": "5.1.0", + "ink-select-input": "^6.0.0", + "ink-text-input": "^6.0.0", + "js-yaml": "^4.1.0", + "pino": "^8.17.2", + "proxy-agent": "^6.4.0", + "react": "18.3.1", + }, + "devDependencies": { + "@types/react": "18.3.0", + }, + }, + "packages/adt-client": { + "name": "@abapify/adt-client", + "version": "0.0.1", + "dependencies": { + "@abapify/adt-contracts": "*", + "@abapify/logger": "*", + }, + }, + "packages/adt-codegen": { + "name": "@abapify/adt-codegen", + "version": "0.1.0", + "bin": { + "adt-codegen": "./dist/cli.js", + }, + "dependencies": { + "chalk": "^5.3.0", + "commander": "^11.1.0", + "fast-xml-parser": "^4.3.2", + }, + }, + "packages/adt-config": { + "name": "@abapify/adt-config", + "version": "0.0.1", + }, + "packages/adt-contracts": { + "name": "@abapify/adt-contracts", + "version": "0.1.0", + "dependencies": { + "@abapify/adt-schemas": "*", + "speci": "*", + }, + "devDependencies": { + "adt-fixtures": "*", + }, + }, + "packages/adt-fixtures": { + "name": "adt-fixtures", + "version": "0.0.1", + }, + "packages/adt-playwright": { + "name": "@abapify/adt-playwright", + "version": "0.0.1", + "dependencies": { + "@abapify/adt-config": "*", + "@abapify/browser-auth": "*", + "playwright": "^1.57.0", + }, + "devDependencies": { + "@types/node": "^22.10.2", + }, + }, + "packages/adt-plugin": { + "name": "@abapify/adt-plugin", + "version": "0.0.1", + "dependencies": { + "@abapify/adk": "*", + }, + }, + "packages/adt-plugin-abapgit": { + "name": "@abapify/adt-plugin-abapgit", + "version": "0.0.1", + "dependencies": { + "@abapify/adk": "*", + "@abapify/adt-plugin": "*", + "ts-xsd": "workspace:*", + }, + }, + "packages/adt-puppeteer": { + "name": "@abapify/adt-puppeteer", + "version": "0.0.1", + "dependencies": { + "@abapify/adt-auth": "*", + "@abapify/adt-config": "*", + "@abapify/browser-auth": "*", + "puppeteer": "^24.0.0", + }, + "peerDependencies": { + "puppeteer": ">=22.0.0", + }, + }, + "packages/adt-schemas": { + "name": "@abapify/adt-schemas", + "version": "0.1.0", + "dependencies": { + "ts-xsd": "*", + }, + "devDependencies": { + "adt-fixtures": "*", + }, + }, + "packages/adt-tui": { + "name": "@abapify/adt-tui", + "version": "0.0.1", + "dependencies": { + "@abapify/adt-contracts": "workspace:*", + "fast-xml-parser": "^5.3.1", + "ink": "5.1.0", + "ink-select-input": "^6.0.0", + "ink-spinner": "^5.0.0", + "ink-text-input": "^6.0.0", + "react": "18.3.1", + }, + "devDependencies": { + "@types/react": "18.3.0", + }, + "peerDependencies": { + "@abapify/adt-client": "*", + }, + }, + "packages/asjson-parser": { + "name": "@abapify/asjson-parser", + "version": "0.1.1", + "dependencies": { + "@nx/rollup": "21.5.1", + "jsonc-eslint-parser": "^2.1.0", + }, + }, + "packages/browser-auth": { + "name": "@abapify/browser-auth", + "version": "0.0.1", + "dependencies": { + "@abapify/adt-config": "*", + }, + "devDependencies": { + "@types/node": "^22.10.2", + }, + }, + "packages/logger": { + "name": "@abapify/logger", + "version": "0.1.0", + }, + "packages/speci": { + "name": "speci", + "version": "0.1.0", + }, + "packages/ts-xsd": { + "name": "ts-xsd", + "version": "0.1.0", + "bin": { + "ts-xsd": "./dist/codegen/cli.mjs", + }, + "dependencies": { + "@xmldom/xmldom": "*", + }, + }, + "samples/sample-tsdown": { + "name": "sample-tsdown", + "version": "0.0.1", + "dependencies": { + "tslib": "^2.3.0", + }, + }, + "tools/nx-sync": { + "name": "nx-sync", + "version": "0.0.1", + }, + "tools/nx-tsdown": { + "name": "nx-tsdown", + "version": "0.0.1", + }, + "tools/nx-typecheck": { + "name": "nx-typecheck", + "version": "0.0.1", + }, + "tools/nx-vitest": { + "name": "nx-vitest", + "version": "0.0.1", + "dependencies": { + "glob": "^10.0.0", + }, + }, + "tools/p2-cli": { + "name": "p2-cli", + "version": "0.1.0", + "bin": { + "p2": "./dist/cli.mjs", + }, + "dependencies": { + "commander": "*", + }, + }, + }, + "packages": { + "@abapify/adk": ["@abapify/adk@workspace:packages/adk"], + + "@abapify/adt-auth": ["@abapify/adt-auth@workspace:packages/adt-auth"], + + "@abapify/adt-cli": ["@abapify/adt-cli@workspace:packages/adt-cli"], + + "@abapify/adt-client": ["@abapify/adt-client@workspace:packages/adt-client"], + + "@abapify/adt-codegen": ["@abapify/adt-codegen@workspace:packages/adt-codegen"], + + "@abapify/adt-config": ["@abapify/adt-config@workspace:packages/adt-config"], + + "@abapify/adt-contracts": ["@abapify/adt-contracts@workspace:packages/adt-contracts"], + + "@abapify/adt-playwright": ["@abapify/adt-playwright@workspace:packages/adt-playwright"], + + "@abapify/adt-plugin": ["@abapify/adt-plugin@workspace:packages/adt-plugin"], + + "@abapify/adt-plugin-abapgit": ["@abapify/adt-plugin-abapgit@workspace:packages/adt-plugin-abapgit"], + + "@abapify/adt-puppeteer": ["@abapify/adt-puppeteer@workspace:packages/adt-puppeteer"], + + "@abapify/adt-schemas": ["@abapify/adt-schemas@workspace:packages/adt-schemas"], + + "@abapify/adt-tui": ["@abapify/adt-tui@workspace:packages/adt-tui"], + + "@abapify/asjson-parser": ["@abapify/asjson-parser@workspace:packages/asjson-parser"], + + "@abapify/browser-auth": ["@abapify/browser-auth@workspace:packages/browser-auth"], + + "@abapify/logger": ["@abapify/logger@workspace:packages/logger"], + + "@alcalzone/ansi-tokenize": ["@alcalzone/ansi-tokenize@0.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.1.3.tgz", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw=="], + + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@ampproject/remapping/-/remapping-2.3.0.tgz", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw=="], + + "@babel/code-frame": ["@babel/code-frame@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/code-frame/-/code-frame-7.27.1.tgz", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/compat-data": ["@babel/compat-data@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/compat-data/-/compat-data-7.28.5.tgz", {}, "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="], + + "@babel/core": ["@babel/core@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/core/-/core-7.28.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="], + + "@babel/generator": ["@babel/generator@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/generator/-/generator-7.28.5.tgz", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="], + + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], + + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ=="], + + "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw=="], + + "@babel/helper-define-polyfill-provider": ["@babel/helper-define-polyfill-provider@0.6.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "debug": "^4.4.1", "lodash.debounce": "^4.0.8", "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-globals/-/helper-globals-7.28.0.tgz", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", { "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" } }, "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], + + "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-remap-async-to-generator": ["@babel/helper-remap-async-to-generator@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA=="], + + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA=="], + + "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.28.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", { "dependencies": { "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2" } }, "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g=="], + + "@babel/helpers": ["@babel/helpers@7.28.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/helpers/-/helpers-7.28.4.tgz", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], + + "@babel/parser": ["@babel/parser@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/parser/-/parser-7.28.5.tgz", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], + + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q=="], + + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ["@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA=="], + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA=="], + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw=="], + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw=="], + + "@babel/plugin-proposal-decorators": ["@babel/plugin-proposal-decorators@7.28.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-syntax-decorators": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg=="], + + "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="], + + "@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="], + + "@babel/plugin-syntax-bigint": ["@babel/plugin-syntax-bigint@7.8.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg=="], + + "@babel/plugin-syntax-class-properties": ["@babel/plugin-syntax-class-properties@7.12.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA=="], + + "@babel/plugin-syntax-class-static-block": ["@babel/plugin-syntax-class-static-block@7.14.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="], + + "@babel/plugin-syntax-decorators": ["@babel/plugin-syntax-decorators@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A=="], + + "@babel/plugin-syntax-import-assertions": ["@babel/plugin-syntax-import-assertions@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg=="], + + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww=="], + + "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], + + "@babel/plugin-syntax-json-strings": ["@babel/plugin-syntax-json-strings@7.8.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w=="], + + "@babel/plugin-syntax-logical-assignment-operators": ["@babel/plugin-syntax-logical-assignment-operators@7.10.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="], + + "@babel/plugin-syntax-nullish-coalescing-operator": ["@babel/plugin-syntax-nullish-coalescing-operator@7.8.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ=="], + + "@babel/plugin-syntax-numeric-separator": ["@babel/plugin-syntax-numeric-separator@7.10.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug=="], + + "@babel/plugin-syntax-object-rest-spread": ["@babel/plugin-syntax-object-rest-spread@7.8.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="], + + "@babel/plugin-syntax-optional-catch-binding": ["@babel/plugin-syntax-optional-catch-binding@7.8.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="], + + "@babel/plugin-syntax-optional-chaining": ["@babel/plugin-syntax-optional-chaining@7.8.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg=="], + + "@babel/plugin-syntax-private-property-in-object": ["@babel/plugin-syntax-private-property-in-object@7.14.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="], + + "@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="], + + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="], + + "@babel/plugin-syntax-unicode-sets-regex": ["@babel/plugin-syntax-unicode-sets-regex@7.18.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg=="], + + "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA=="], + + "@babel/plugin-transform-async-generator-functions": ["@babel/plugin-transform-async-generator-functions@7.28.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", "@babel/traverse": "^7.28.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q=="], + + "@babel/plugin-transform-async-to-generator": ["@babel/plugin-transform-async-to-generator@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA=="], + + "@babel/plugin-transform-block-scoped-functions": ["@babel/plugin-transform-block-scoped-functions@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg=="], + + "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g=="], + + "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA=="], + + "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.28.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg=="], + + "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/traverse": "^7.28.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA=="], + + "@babel/plugin-transform-computed-properties": ["@babel/plugin-transform-computed-properties@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/template": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw=="], + + "@babel/plugin-transform-destructuring": ["@babel/plugin-transform-destructuring@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw=="], + + "@babel/plugin-transform-dotall-regex": ["@babel/plugin-transform-dotall-regex@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw=="], + + "@babel/plugin-transform-duplicate-keys": ["@babel/plugin-transform-duplicate-keys@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q=="], + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ["@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ=="], + + "@babel/plugin-transform-dynamic-import": ["@babel/plugin-transform-dynamic-import@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A=="], + + "@babel/plugin-transform-explicit-resource-management": ["@babel/plugin-transform-explicit-resource-management@7.28.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ=="], + + "@babel/plugin-transform-exponentiation-operator": ["@babel/plugin-transform-exponentiation-operator@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw=="], + + "@babel/plugin-transform-export-namespace-from": ["@babel/plugin-transform-export-namespace-from@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ=="], + + "@babel/plugin-transform-for-of": ["@babel/plugin-transform-for-of@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw=="], + + "@babel/plugin-transform-function-name": ["@babel/plugin-transform-function-name@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ=="], + + "@babel/plugin-transform-json-strings": ["@babel/plugin-transform-json-strings@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q=="], + + "@babel/plugin-transform-literals": ["@babel/plugin-transform-literals@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA=="], + + "@babel/plugin-transform-logical-assignment-operators": ["@babel/plugin-transform-logical-assignment-operators@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA=="], + + "@babel/plugin-transform-member-expression-literals": ["@babel/plugin-transform-member-expression-literals@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ=="], + + "@babel/plugin-transform-modules-amd": ["@babel/plugin-transform-modules-amd@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA=="], + + "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw=="], + + "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", { "dependencies": { "@babel/helper-module-transforms": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew=="], + + "@babel/plugin-transform-modules-umd": ["@babel/plugin-transform-modules-umd@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w=="], + + "@babel/plugin-transform-named-capturing-groups-regex": ["@babel/plugin-transform-named-capturing-groups-regex@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng=="], + + "@babel/plugin-transform-new-target": ["@babel/plugin-transform-new-target@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ=="], + + "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA=="], + + "@babel/plugin-transform-numeric-separator": ["@babel/plugin-transform-numeric-separator@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw=="], + + "@babel/plugin-transform-object-rest-spread": ["@babel/plugin-transform-object-rest-spread@7.28.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/traverse": "^7.28.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew=="], + + "@babel/plugin-transform-object-super": ["@babel/plugin-transform-object-super@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng=="], + + "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q=="], + + "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ=="], + + "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.27.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg=="], + + "@babel/plugin-transform-private-methods": ["@babel/plugin-transform-private-methods@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA=="], + + "@babel/plugin-transform-private-property-in-object": ["@babel/plugin-transform-private-property-in-object@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ=="], + + "@babel/plugin-transform-property-literals": ["@babel/plugin-transform-property-literals@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ=="], + + "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.28.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA=="], + + "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA=="], + + "@babel/plugin-transform-reserved-words": ["@babel/plugin-transform-reserved-words@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw=="], + + "@babel/plugin-transform-runtime": ["@babel/plugin-transform-runtime@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w=="], + + "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ=="], + + "@babel/plugin-transform-spread": ["@babel/plugin-transform-spread@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q=="], + + "@babel/plugin-transform-sticky-regex": ["@babel/plugin-transform-sticky-regex@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g=="], + + "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg=="], + + "@babel/plugin-transform-typeof-symbol": ["@babel/plugin-transform-typeof-symbol@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw=="], + + "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA=="], + + "@babel/plugin-transform-unicode-escapes": ["@babel/plugin-transform-unicode-escapes@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg=="], + + "@babel/plugin-transform-unicode-property-regex": ["@babel/plugin-transform-unicode-property-regex@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q=="], + + "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw=="], + + "@babel/plugin-transform-unicode-sets-regex": ["@babel/plugin-transform-unicode-sets-regex@7.27.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw=="], + + "@babel/preset-env": ["@babel/preset-env@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/preset-env/-/preset-env-7.28.5.tgz", { "dependencies": { "@babel/compat-data": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.27.1", "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.5", "@babel/plugin-transform-class-properties": "^7.27.1", "@babel/plugin-transform-class-static-block": "^7.28.3", "@babel/plugin-transform-classes": "^7.28.4", "@babel/plugin-transform-computed-properties": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.0", "@babel/plugin-transform-exponentiation-operator": "^7.28.5", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.27.1", "@babel/plugin-transform-literals": "^7.27.1", "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-modules-systemjs": "^7.28.5", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", "@babel/plugin-transform-object-rest-spread": "^7.28.4", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", "@babel/plugin-transform-regenerator": "^7.28.4", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-spread": "^7.27.1", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", "@babel/plugin-transform-unicode-property-regex": "^7.27.1", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg=="], + + "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], + + "@babel/preset-typescript": ["@babel/preset-typescript@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g=="], + + "@babel/runtime": ["@babel/runtime@7.28.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/runtime/-/runtime-7.28.4.tgz", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@babel/template": ["@babel/template@7.27.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/template/-/template-7.27.2.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], + + "@babel/traverse": ["@babel/traverse@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/traverse/-/traverse-7.28.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="], + + "@babel/types": ["@babel/types@7.28.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@babel/types/-/types-7.28.5.tgz", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], + + "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], + + "@borewit/text-codec": ["@borewit/text-codec@0.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@borewit/text-codec/-/text-codec-0.1.1.tgz", {}, "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA=="], + + "@cap-js/asyncapi": ["@cap-js/asyncapi@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cap-js/asyncapi/-/asyncapi-1.0.3.tgz", { "peerDependencies": { "@sap/cds": ">=7.6" } }, "sha512-vZSWKAe+3qfvZDXV5SSFiObGWmqyS9MDyEADb5PLVT8kzO39qGaSDPv/GzI/gwvRfCayGAjU4ThiBKrFA7Gclg=="], + + "@cap-js/cds-types": ["@cap-js/cds-types@0.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cap-js/cds-types/-/cds-types-0.7.0.tgz", { "dependencies": { "@types/express": "^4.17.21" }, "peerDependencies": { "@sap/cds": "^8.0.0" } }, "sha512-zprkz3csN7z7v+0V78UlCfg2psm7Q3DJwvBjQB5BxVhlBcmuzoXn5EKKvzIXjflgWP1hUsDUhjVU5Hg9Quvq0g=="], + + "@cap-js/db-service": ["@cap-js/db-service@1.20.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cap-js/db-service/-/db-service-1.20.3.tgz", { "dependencies": { "generic-pool": "^3.9.0" }, "peerDependencies": { "@sap/cds": ">=7.9 <9" } }, "sha512-/BLwO5hsyxgoH7I5yenNulxiYyuxGzi8uZXDqQwx1zZOAp9IjaNxaQmFW2lFFeolj7bXhdJNCSJ+WnY3l4r6tg=="], + + "@cap-js/openapi": ["@cap-js/openapi@1.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cap-js/openapi/-/openapi-1.2.3.tgz", { "dependencies": { "pluralize": "^8.0.0" }, "peerDependencies": { "@sap/cds": ">=7.6" } }, "sha512-UnEUBrBIjMvYYJTtAmSrnWLKIjnaK9KcCS6pPoVBRgZrMaL0bl/aB3KMH4xzc6LWjtbxzlyI71XC7No4+SKerg=="], + + "@cap-js/sqlite": ["@cap-js/sqlite@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cap-js/sqlite/-/sqlite-1.11.1.tgz", { "dependencies": { "@cap-js/db-service": "^1.20.0", "better-sqlite3": "^11.0.0" }, "peerDependencies": { "@sap/cds": ">=7.6 <9" } }, "sha512-vM5aggdzMvhUyfLo5Z/yqwro7jzXI5JawRRPaf7/LSaWedP9Y20nSvE0o+Frl1gtzGgBOx0MtESec3daEI3xFw=="], + + "@cloudfoundry/api": ["@cloudfoundry/api@0.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cloudfoundry/api/-/api-0.1.7.tgz", { "dependencies": { "axios": "^1.7.7", "qs": "^6.13.1" } }, "sha512-iDpHdDLT7+WwkfV/KhBqY9np8XcAibLqhD/UqBpbmOpGFHEx7ulaP0a7ZemuKbM2eDmUWcpvJysY+c6NRIWRlA=="], + + "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], + + "@csstools/color-helpers": ["@csstools/color-helpers@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", {}, "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA=="], + + "@csstools/css-calc": ["@csstools/css-calc@2.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@csstools/css-calc/-/css-calc-2.1.4.tgz", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ=="], + + "@csstools/css-color-parser": ["@csstools/css-color-parser@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "@csstools/css-calc": "^2.1.4" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA=="], + + "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ=="], + + "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], + + "@cypress/request": ["@cypress/request@3.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@cypress/request/-/request-3.0.8.tgz", { "dependencies": { "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.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" } }, "sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ=="], + + "@emnapi/core": ["@emnapi/core@1.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@emnapi/core/-/core-1.7.0.tgz", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@emnapi/runtime/-/runtime-1.7.0.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/android-arm/-/android-arm-0.25.12.tgz", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/android-x64/-/android-x64-0.25.12.tgz", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + + "@eslint/config-array": ["@eslint/config-array@0.21.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint/config-array/-/config-array-0.21.1.tgz", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], + + "@eslint/core": ["@eslint/core@0.17.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint/core/-/core-0.17.0.tgz", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.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" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], + + "@eslint/js": ["@eslint/js@9.39.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint/js/-/js-9.39.1.tgz", {}, "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint/object-schema/-/object-schema-2.1.7.tgz", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@humanfs/core/-/core-0.19.1.tgz", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@humanfs/node/-/node-0.16.7.tgz", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@humanwhocodes/retry/-/retry-0.4.3.tgz", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@inquirer/ansi": ["@inquirer/ansi@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/ansi/-/ansi-1.0.2.tgz", {}, "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ=="], + + "@inquirer/checkbox": ["@inquirer/checkbox@4.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/checkbox/-/checkbox-4.3.2.tgz", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA=="], + + "@inquirer/confirm": ["@inquirer/confirm@5.1.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/confirm/-/confirm-5.1.21.tgz", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ=="], + + "@inquirer/core": ["@inquirer/core@10.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/core/-/core-10.3.2.tgz", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A=="], + + "@inquirer/editor": ["@inquirer/editor@4.2.23", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/editor/-/editor-4.2.23.tgz", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/external-editor": "^1.0.3", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ=="], + + "@inquirer/expand": ["@inquirer/expand@4.0.23", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/expand/-/expand-4.0.23.tgz", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew=="], + + "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/external-editor/-/external-editor-1.0.3.tgz", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], + + "@inquirer/figures": ["@inquirer/figures@1.0.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/figures/-/figures-1.0.15.tgz", {}, "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g=="], + + "@inquirer/input": ["@inquirer/input@4.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/input/-/input-4.3.1.tgz", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g=="], + + "@inquirer/number": ["@inquirer/number@3.0.23", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/number/-/number-3.0.23.tgz", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg=="], + + "@inquirer/password": ["@inquirer/password@4.0.23", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/password/-/password-4.0.23.tgz", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA=="], + + "@inquirer/prompts": ["@inquirer/prompts@7.10.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/prompts/-/prompts-7.10.1.tgz", { "dependencies": { "@inquirer/checkbox": "^4.3.2", "@inquirer/confirm": "^5.1.21", "@inquirer/editor": "^4.2.23", "@inquirer/expand": "^4.0.23", "@inquirer/input": "^4.3.1", "@inquirer/number": "^3.0.23", "@inquirer/password": "^4.0.23", "@inquirer/rawlist": "^4.1.11", "@inquirer/search": "^3.2.2", "@inquirer/select": "^4.4.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg=="], + + "@inquirer/rawlist": ["@inquirer/rawlist@4.1.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/rawlist/-/rawlist-4.1.11.tgz", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw=="], + + "@inquirer/search": ["@inquirer/search@3.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/search/-/search-3.2.2.tgz", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA=="], + + "@inquirer/select": ["@inquirer/select@4.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/select/-/select-4.4.2.tgz", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w=="], + + "@inquirer/type": ["@inquirer/type@3.0.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@inquirer/type/-/type-3.0.10.tgz", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA=="], + + "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], + + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@isaacs/cliui/-/cliui-8.0.2.tgz", { "dependencies": { "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" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@istanbuljs/load-nyc-config": ["@istanbuljs/load-nyc-config@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", { "dependencies": { "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" } }, "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="], + + "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@istanbuljs/schema/-/schema-0.1.3.tgz", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], + + "@jest/console": ["@jest/console@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/console/-/console-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "slash": "^3.0.0" } }, "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ=="], + + "@jest/core": ["@jest/core@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/core/-/core-30.0.5.tgz", { "dependencies": { "@jest/console": "30.0.5", "@jest/pattern": "30.0.1", "@jest/reporters": "30.0.5", "@jest/test-result": "30.0.5", "@jest/transform": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-changed-files": "30.0.5", "jest-config": "30.0.5", "jest-haste-map": "30.0.5", "jest-message-util": "30.0.5", "jest-regex-util": "30.0.1", "jest-resolve": "30.0.5", "jest-resolve-dependencies": "30.0.5", "jest-runner": "30.0.5", "jest-runtime": "30.0.5", "jest-snapshot": "30.0.5", "jest-util": "30.0.5", "jest-validate": "30.0.5", "jest-watcher": "30.0.5", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg=="], + + "@jest/create-cache-key-function": ["@jest/create-cache-key-function@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/create-cache-key-function/-/create-cache-key-function-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0" } }, "sha512-44F4l4Enf+MirJN8X/NhdGkl71k5rBYiwdVlo4HxOwbu0sHV8QKrGEedb1VUU4K3W7fBKE0HGfbn7eZm0Ti3zg=="], + + "@jest/diff-sequences": ["@jest/diff-sequences@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", {}, "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw=="], + + "@jest/environment": ["@jest/environment@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/environment/-/environment-30.0.5.tgz", { "dependencies": { "@jest/fake-timers": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "jest-mock": "30.0.5" } }, "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA=="], + + "@jest/environment-jsdom-abstract": ["@jest/environment-jsdom-abstract@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/fake-timers": "30.0.5", "@jest/types": "30.0.5", "@types/jsdom": "^21.1.7", "@types/node": "*", "jest-mock": "30.0.5", "jest-util": "30.0.5" }, "peerDependencies": { "canvas": "^3.0.0", "jsdom": "*" }, "optionalPeers": ["canvas"] }, "sha512-gpWwiVxZunkoglP8DCnT3As9x5O8H6gveAOpvaJd2ATAoSh7ZSSCWbr9LQtUMvr8WD3VjG9YnDhsmkCK5WN1rQ=="], + + "@jest/expect": ["@jest/expect@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect/-/expect-30.2.0.tgz", { "dependencies": { "expect": "30.2.0", "jest-snapshot": "30.2.0" } }, "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA=="], + + "@jest/expect-utils": ["@jest/expect-utils@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect-utils/-/expect-utils-30.2.0.tgz", { "dependencies": { "@jest/get-type": "30.1.0" } }, "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA=="], + + "@jest/fake-timers": ["@jest/fake-timers@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/fake-timers/-/fake-timers-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-util": "30.2.0" } }, "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw=="], + + "@jest/get-type": ["@jest/get-type@30.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.1.0.tgz", {}, "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA=="], + + "@jest/globals": ["@jest/globals@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/globals/-/globals-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/expect": "30.0.5", "@jest/types": "30.0.5", "jest-mock": "30.0.5" } }, "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA=="], + + "@jest/pattern": ["@jest/pattern@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/pattern/-/pattern-30.0.1.tgz", { "dependencies": { "@types/node": "*", "jest-regex-util": "30.0.1" } }, "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA=="], + + "@jest/reporters": ["@jest/reporters@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/reporters/-/reporters-30.2.0.tgz", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "jest-worker": "30.2.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ=="], + + "@jest/schemas": ["@jest/schemas@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/schemas/-/schemas-30.0.5.tgz", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "@jest/snapshot-utils": ["@jest/snapshot-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" } }, "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ=="], + + "@jest/source-map": ["@jest/source-map@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/source-map/-/source-map-30.0.1.tgz", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "callsites": "^3.1.0", "graceful-fs": "^4.2.11" } }, "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg=="], + + "@jest/test-result": ["@jest/test-result@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-result/-/test-result-30.2.0.tgz", { "dependencies": { "@jest/console": "30.2.0", "@jest/types": "30.2.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg=="], + + "@jest/test-sequencer": ["@jest/test-sequencer@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", { "dependencies": { "@jest/test-result": "30.2.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "slash": "^3.0.0" } }, "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q=="], + + "@jest/transform": ["@jest/transform@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/transform/-/transform-30.2.0.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-regex-util": "30.0.1", "jest-util": "30.2.0", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA=="], + + "@jest/types": ["@jest/types@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.0.5.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jridgewell/remapping/-/remapping-2.3.5.tgz", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jridgewell/source-map/-/source-map-0.3.11.tgz", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@napi-rs/nice": ["@napi-rs/nice@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice/-/nice-1.1.1.tgz", { "optionalDependencies": { "@napi-rs/nice-android-arm-eabi": "1.1.1", "@napi-rs/nice-android-arm64": "1.1.1", "@napi-rs/nice-darwin-arm64": "1.1.1", "@napi-rs/nice-darwin-x64": "1.1.1", "@napi-rs/nice-freebsd-x64": "1.1.1", "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", "@napi-rs/nice-linux-arm64-gnu": "1.1.1", "@napi-rs/nice-linux-arm64-musl": "1.1.1", "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", "@napi-rs/nice-linux-s390x-gnu": "1.1.1", "@napi-rs/nice-linux-x64-gnu": "1.1.1", "@napi-rs/nice-linux-x64-musl": "1.1.1", "@napi-rs/nice-openharmony-arm64": "1.1.1", "@napi-rs/nice-win32-arm64-msvc": "1.1.1", "@napi-rs/nice-win32-ia32-msvc": "1.1.1", "@napi-rs/nice-win32-x64-msvc": "1.1.1" } }, "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw=="], + + "@napi-rs/nice-android-arm-eabi": ["@napi-rs/nice-android-arm-eabi@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", { "os": "android", "cpu": "arm" }, "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw=="], + + "@napi-rs/nice-android-arm64": ["@napi-rs/nice-android-arm64@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", { "os": "android", "cpu": "arm64" }, "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw=="], + + "@napi-rs/nice-darwin-arm64": ["@napi-rs/nice-darwin-arm64@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A=="], + + "@napi-rs/nice-darwin-x64": ["@napi-rs/nice-darwin-x64@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ=="], + + "@napi-rs/nice-freebsd-x64": ["@napi-rs/nice-freebsd-x64@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ=="], + + "@napi-rs/nice-linux-arm-gnueabihf": ["@napi-rs/nice-linux-arm-gnueabihf@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", { "os": "linux", "cpu": "arm" }, "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg=="], + + "@napi-rs/nice-linux-arm64-gnu": ["@napi-rs/nice-linux-arm64-gnu@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ=="], + + "@napi-rs/nice-linux-arm64-musl": ["@napi-rs/nice-linux-arm64-musl@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg=="], + + "@napi-rs/nice-linux-ppc64-gnu": ["@napi-rs/nice-linux-ppc64-gnu@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg=="], + + "@napi-rs/nice-linux-riscv64-gnu": ["@napi-rs/nice-linux-riscv64-gnu@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", { "os": "linux", "cpu": "none" }, "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw=="], + + "@napi-rs/nice-linux-s390x-gnu": ["@napi-rs/nice-linux-s390x-gnu@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ=="], + + "@napi-rs/nice-linux-x64-gnu": ["@napi-rs/nice-linux-x64-gnu@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg=="], + + "@napi-rs/nice-linux-x64-musl": ["@napi-rs/nice-linux-x64-musl@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw=="], + + "@napi-rs/nice-openharmony-arm64": ["@napi-rs/nice-openharmony-arm64@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", { "os": "none", "cpu": "arm64" }, "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ=="], + + "@napi-rs/nice-win32-arm64-msvc": ["@napi-rs/nice-win32-arm64-msvc@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA=="], + + "@napi-rs/nice-win32-ia32-msvc": ["@napi-rs/nice-win32-ia32-msvc@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug=="], + + "@napi-rs/nice-win32-x64-msvc": ["@napi-rs/nice-win32-x64-msvc@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", { "os": "win32", "cpu": "x64" }, "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", { "dependencies": { "@emnapi/core": "^1.1.0", "@emnapi/runtime": "^1.1.0", "@tybys/wasm-util": "^0.9.0" } }, "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@nx/devkit": ["@nx/devkit@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/devkit/-/devkit-22.1.1.tgz", { "dependencies": { "@zkochan/js-yaml": "0.0.7", "ejs": "^3.1.7", "enquirer": "~2.3.6", "minimatch": "9.0.3", "semver": "^7.6.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { "nx": ">= 21 <= 23 || ^22.0.0-0" } }, "sha512-KAfo3xKVzfYOzpDEeQC2aA1xhNDi9wpt85yWf4A7ABvbrbl9pv9e2UAo1LSFP9DlLSRn9iX+FBjLA5NKmJdKcg=="], + + "@nx/docker": ["@nx/docker@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/docker/-/docker-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "enquirer": "~2.3.6", "tslib": "^2.3.0" } }, "sha512-ZybftCHGhg5Dg8Uw8LbTUFZ4H+2viEDVTuA+RMvRQogHz4C/w+0RykpaOVEeM+w7nHdu5MCFH9fTnZdB/1AFnA=="], + + "@nx/eslint": ["@nx/eslint@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/eslint/-/eslint-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/js": "22.1.1", "semver": "^7.6.3", "tslib": "^2.3.0", "typescript": "~5.9.2" }, "peerDependencies": { "@zkochan/js-yaml": "0.0.7", "eslint": "^8.0.0 || ^9.0.0" }, "optionalPeers": ["@zkochan/js-yaml"] }, "sha512-OTEJdrYLkpCzribRnE08mK5L0nAn6soepiDQJG3dg2fNs2uGMnvXb6LdwQ+7RZqD2V+HqZVeSjArhblf0drDPQ=="], + + "@nx/eslint-plugin": ["@nx/eslint-plugin@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/eslint-plugin/-/eslint-plugin-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/js": "22.1.1", "@phenomnomnominal/tsquery": "~5.0.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.6.3", "tslib": "^2.3.0" }, "peerDependencies": { "@typescript-eslint/parser": "^6.13.2 || ^7.0.0 || ^8.0.0", "eslint-config-prettier": "^10.0.0" }, "optionalPeers": ["eslint-config-prettier"] }, "sha512-Edyeguwrf3m+LJTCGo6M9LmpwG9yqeHROZAjEONFC8ETtJZy4lmha3s+XE4g7V+YIbXCgMYsK7LBdHzLUiOYnA=="], + + "@nx/jest": ["@nx/jest@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/jest/-/jest-22.1.1.tgz", { "dependencies": { "@jest/reporters": "^30.0.2", "@jest/test-result": "^30.0.2", "@nx/devkit": "22.1.1", "@nx/js": "22.1.1", "@phenomnomnominal/tsquery": "~5.0.1", "identity-obj-proxy": "3.0.0", "jest-config": "^30.0.2", "jest-resolve": "^30.0.2", "jest-util": "^30.0.2", "minimatch": "9.0.3", "picocolors": "^1.1.0", "resolve.exports": "2.0.3", "semver": "^7.6.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } }, "sha512-jhW14AgWZdxqQZbASzDOLqIJxnV9z9njzKO/TtDxksPQkkuwZn7VT/thC+rzja/PmIJYHyQpZ6B1prayk6GCSw=="], + + "@nx/js": ["@nx/js@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/js/-/js-22.1.1.tgz", { "dependencies": { "@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": "22.1.1", "@nx/workspace": "22.1.1", "@zkochan/js-yaml": "0.0.7", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^3.1.0", "babel-plugin-transform-typescript-metadata": "^0.3.1", "chalk": "^4.1.0", "columnify": "^1.6.0", "detect-port": "^1.5.1", "ignore": "^5.0.4", "js-tokens": "^4.0.0", "jsonc-parser": "3.2.0", "npm-run-path": "^4.0.1", "picocolors": "^1.1.0", "picomatch": "4.0.2", "semver": "^7.6.3", "source-map-support": "0.5.19", "tinyglobby": "^0.2.12", "tslib": "^2.3.0" }, "peerDependencies": { "verdaccio": "^6.0.5" }, "optionalPeers": ["verdaccio"] }, "sha512-JapLufitpYiZSTIrBc8KhpU4ViMNL513V5g+YhvzW4RNhTAGqxAbeOYK+LEMcrpR2pwk6zCWzRWznQeSaCsbQA=="], + + "@nx/node": ["@nx/node@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/node/-/node-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/docker": "22.1.1", "@nx/eslint": "22.1.1", "@nx/jest": "22.1.1", "@nx/js": "22.1.1", "kill-port": "^1.6.1", "tcp-port-used": "^1.0.2", "tslib": "^2.3.0" } }, "sha512-8BvxgcPydW0Wg0U7WyU7tVT3AY0fOsCW1nmE2tc2gmg7Drd0I+49Ee8GJxkD/sP8HZA+0rndLmUHM68JtIeZPA=="], + + "@nx/nx-darwin-arm64": ["@nx/nx-darwin-arm64@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.1.1.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-B1XlawHKfgj/PCc/A/cV+GtRgPXQQrDV3pv7ohDcqTksHNMc4B5Kx+oyihbeq5u8z+eNBsU8C1WiGEOXvwXEyg=="], + + "@nx/nx-darwin-x64": ["@nx/nx-darwin-x64@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-darwin-x64/-/nx-darwin-x64-22.1.1.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-VHThopq74WtFro7UiJkiRsKW4fVzmOSnV9rUUZhm4vKqemtDGOHmVWZmQmuUCvVt0pQvxTs00DdYRIWykxeQ6w=="], + + "@nx/nx-freebsd-x64": ["@nx/nx-freebsd-x64@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.1.1.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-OGklM9RQi1of5TTO1dPvYjgUfMos+Cu3BhDlUnCEOo8SaFfjsi57AFG9nEcMlizWj9q5699kerPRVFmDiz2Nxg=="], + + "@nx/nx-linux-arm-gnueabihf": ["@nx/nx-linux-arm-gnueabihf@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.1.1.tgz", { "os": "linux", "cpu": "arm" }, "sha512-45c32yMyU1QFyVLrKv5QVT2EfiRh5eAfHu7k1NfNlxuUtgeB34+p96p2hloOVLFlVXMZTIqucJTuXBwaJPg4ag=="], + + "@nx/nx-linux-arm64-gnu": ["@nx/nx-linux-arm64-gnu@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.1.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-63N6lV+LptT4yVXfshPQoTugyVVNaOdC6gCMAq9D9Xl0MNs8Cc1PQDnUg+snyFAENoLBkJPzT2/NLBAgmRoB/A=="], + + "@nx/nx-linux-arm64-musl": ["@nx/nx-linux-arm64-musl@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.1.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-r1NFh6+virI3GDDnBh4UlPH/EeCNw/pn9vEyaiQopbB+XngLw7HAxwoJmv4rdEMm82w8ztMrBeTwxo7rtKdHcQ=="], + + "@nx/nx-linux-x64-gnu": ["@nx/nx-linux-x64-gnu@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.1.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-VoogXatmWvjVECjQRd4wN9xMZ2ig1h90rAU0O1XkRF0cuTtNKS/6K6+tABSr88RSYMa8jont+cA1uaNaBEdutA=="], + + "@nx/nx-linux-x64-musl": ["@nx/nx-linux-x64-musl@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.1.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-C4rEO7ITUYFvHRAq0fDa0MRdy4VHUWYYKxa4Wigwfzjw57zJ3128tHRARkfwvdkaIUjywlVSM4RudXm3vaDoTg=="], + + "@nx/nx-win32-arm64-msvc": ["@nx/nx-win32-arm64-msvc@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.1.1.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-zVyEyrqndOFs3TiLIN+4iTqanCFGjY+7y0LzN2t9XdswRef0H1qGrCTtF5eNGuxYBvguoQmZxnStAjJNYz7ksw=="], + + "@nx/nx-win32-x64-msvc": ["@nx/nx-win32-x64-msvc@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.1.1.tgz", { "os": "win32", "cpu": "x64" }, "sha512-GBuWLm2xxmlDtgOomdlg7RZ8ro9cWFKE0Zhvx3bvX1v1x0kzfL4Uw5oychxEmFhhzq+gVs91txdKjqThw11Iqg=="], + + "@nx/plugin": ["@nx/plugin@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/plugin/-/plugin-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/eslint": "22.1.1", "@nx/jest": "22.1.1", "@nx/js": "22.1.1", "tslib": "^2.3.0" } }, "sha512-towyy3twqQSEhFrEHFyxAq9QuOUg8h3AcenALWH+3WUmy4mi+g3qjQ6vL/XMFYppHx87xCav1EUTglJyV+bT0w=="], + + "@nx/rollup": ["@nx/rollup@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/rollup/-/rollup-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/js": "22.1.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", "picocolors": "^1.1.0", "picomatch": "4.0.2", "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" } }, "sha512-8hUSWGyig9bp0B3ScMd8f93ghP+0jvl1I2SMRFYpsnHsW+NBWweeNLTLHnLjDddLWitH3hrhMrBnhb4fwYyzjg=="], + + "@nx/vite": ["@nx/vite@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/vite/-/vite-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/js": "22.1.1", "@nx/vitest": "22.1.1", "@phenomnomnominal/tsquery": "~5.0.1", "ajv": "^8.0.0", "enquirer": "~2.3.6", "picomatch": "4.0.2", "semver": "^7.6.3", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", "vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0" } }, "sha512-wRei7Mb+rm+hvmIODTM1MLuEYop9tIRRTa2y8t/UpmksAzYLEyHCE44TTdWrTjPMj1sRwRcnq68gSq8j/5Ub3A=="], + + "@nx/vitest": ["@nx/vitest@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/vitest/-/vitest-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/js": "22.1.1", "@phenomnomnominal/tsquery": "~5.0.1", "semver": "^7.6.3", "tslib": "^2.3.0" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" }, "optionalPeers": ["vite", "vitest"] }, "sha512-tedotYAj4oJ9ODgu0C4jn8yDKf6FSLzc9+IC+exuGWa6jjlalUGRPLtLejv4TlQJWtRQzB4fSRJk8t/+LiPPvA=="], + + "@nx/web": ["@nx/web@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/web/-/web-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@nx/js": "22.1.1", "detect-port": "^1.5.1", "http-server": "^14.1.0", "picocolors": "^1.1.0", "tslib": "^2.3.0" } }, "sha512-r9PB7z/Aq/FIBVBmIShFgB8XUB9gT4a7fdlJ8i5EEAEEVACROAVs9XNFUcYxvlQkQ8tRLpNV1gFAtOPAqdi+eg=="], + + "@nx/workspace": ["@nx/workspace@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/workspace/-/workspace-22.1.1.tgz", { "dependencies": { "@nx/devkit": "22.1.1", "@zkochan/js-yaml": "0.0.7", "chalk": "^4.1.0", "enquirer": "~2.3.6", "nx": "22.1.1", "picomatch": "4.0.2", "semver": "^7.6.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } }, "sha512-qFG/CuoNXImIw0hMUYtFOql8Ed5I/4P37iASZeQQxksTjaShcfzl0Ei2tzAqAANNfef5ANfTdnczRnwwHchnfA=="], + + "@oxc-project/runtime": ["@oxc-project/runtime@0.96.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-project/runtime/-/runtime-0.96.0.tgz", {}, "sha512-34lh4o9CcSw09Hx6fKihPu85+m+4pmDlkXwJrLvN5nMq5JrcGhhihVM415zDqT8j8IixO1PYYdQZRN4SwQCncg=="], + + "@oxc-project/types": ["@oxc-project/types@0.98.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-project/types/-/types-0.98.0.tgz", {}, "sha512-Vzmd6FsqVuz5HQVcRC/hrx7Ujo3WEVeQP7C2UNP5uy1hUY4SQvMB+93jxkI1KRHz9a/6cni3glPOtvteN+zpsw=="], + + "@oxc-resolver/binding-android-arm-eabi": ["@oxc-resolver/binding-android-arm-eabi@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.14.0.tgz", { "os": "android", "cpu": "arm" }, "sha512-jB47iZ/thvhE+USCLv+XY3IknBbkKr/p7OBsQDTHode/GPw+OHRlit3NQ1bjt1Mj8V2CS7iHdSDYobZ1/0gagQ=="], + + "@oxc-resolver/binding-android-arm64": ["@oxc-resolver/binding-android-arm64@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.14.0.tgz", { "os": "android", "cpu": "arm64" }, "sha512-XFJ9t7d/Cz+dWLyqtTy3Xrekz+qqN4hmOU2iOUgr7u71OQsPUHIIeS9/wKanEK0l413gPwapIkyc5x9ltlOtyw=="], + + "@oxc-resolver/binding-darwin-arm64": ["@oxc-resolver/binding-darwin-arm64@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.14.0.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-gwehBS9smA1mzK8frDsmUCHz+6baJVwkKF6qViHhoqA3kRKvIZ3k6WNP4JmF19JhOiGxRcoPa8gZRfzNgXwP2A=="], + + "@oxc-resolver/binding-darwin-x64": ["@oxc-resolver/binding-darwin-x64@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.14.0.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-5wwJvfuoahKiAqqAsMLOI28rqdh3P2K7HkjIWUXNMWAZq6ErX0L5rwJzu6T32+Zxw3k18C7R9IS4wDq/3Ar+6w=="], + + "@oxc-resolver/binding-freebsd-x64": ["@oxc-resolver/binding-freebsd-x64@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.14.0.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-MWTt+LOQNcQ6fa+Uu5VikkihLi1PSIrQqqp0QD44k2AORasNWl0jRGBTcMSBIgNe82qEQWYvlGzvOEEOBp01Og=="], + + "@oxc-resolver/binding-linux-arm-gnueabihf": ["@oxc-resolver/binding-linux-arm-gnueabihf@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.14.0.tgz", { "os": "linux", "cpu": "arm" }, "sha512-b6/IBqYrS3o0XiLVBsnex/wK8pTTK+hbGfAMOHVU6p7DBpwPPLgC/tav4IXoOIUCssTFz7aWh/xtUok0swn8VQ=="], + + "@oxc-resolver/binding-linux-arm-musleabihf": ["@oxc-resolver/binding-linux-arm-musleabihf@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.14.0.tgz", { "os": "linux", "cpu": "arm" }, "sha512-o2Qh5+y5YoqVK6YfzkalHdpmQ5bkbGGxuLg1pZLQ1Ift0x+Vix7DaFEpdCl5Z9xvYXogd/TwOlL0TPl4+MTFLA=="], + + "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.14.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-lk8mCSg0Tg4sEG73RiPjb7keGcEPwqQnBHX3Z+BR2SWe+qNHpoHcyFMNafzSvEC18vlxC04AUSoa6kJl/C5zig=="], + + "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.14.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-KykeIVhCM7pn93ABa0fNe8vk4XvnbfZMELne2s6P9tdJH9KMBsCFBi7a2BmSdUtTqWCAJokAcm46lpczU52Xaw=="], + + "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.14.0.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-QqPPWAcZU/jHAuam4f3zV8OdEkYRPD2XR0peVet3hoMMgsihR3Lhe7J/bLclmod297FG0+OgBYQVMh2nTN6oWA=="], + + "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.14.0.tgz", { "os": "linux", "cpu": "none" }, "sha512-DunWA+wafeG3hj1NADUD3c+DRvmyVNqF5LSHVUWA2bzswqmuEZXl3VYBSzxfD0j+UnRTFYLxf27AMptoMsepYg=="], + + "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.14.0.tgz", { "os": "linux", "cpu": "none" }, "sha512-4SRvwKTTk2k67EQr9Ny4NGf/BhlwggCI1CXwBbA9IV4oP38DH8b+NAPxDY0ySGRsWbPkG92FYOqM4AWzG4GSgA=="], + + "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.14.0.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-hZKvkbsurj4JOom//R1Ab2MlC4cGeVm5zzMt4IsS3XySQeYjyMJ5TDZ3J5rQ8bVj3xi4FpJU2yFZ72GApsHQ6A=="], + + "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.14.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-hABxQXFXJurivw+0amFdeEcK67cF1BGBIN1+sSHzq3TRv4RoG8n5q2JE04Le2n2Kpt6xg4Y5+lcv+rb2mCJLgQ=="], + + "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.14.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-Ln73wUB5migZRvC7obAAdqVwvFvk7AUs2JLt4g9QHr8FnqivlsjpUC9Nf2ssrybdjyQzEMjttUxPZz6aKPSAHw=="], + + "@oxc-resolver/binding-wasm32-wasi": ["@oxc-resolver/binding-wasm32-wasi@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.14.0.tgz", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.7" }, "cpu": "none" }, "sha512-z+NbELmCOKNtWOqEB5qDfHXOSWB3kGQIIehq6nHtZwHLzdVO2oBq6De/ayhY3ygriC1XhgaIzzniY7jgrNl4Kw=="], + + "@oxc-resolver/binding-win32-arm64-msvc": ["@oxc-resolver/binding-win32-arm64-msvc@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.14.0.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-Ft0+qd7HSO61qCTLJ4LCdBGZkpKyDj1rG0OVSZL1DxWQoh97m7vEHd7zAvUtw8EcWjOMBQuX4mfRap/x2MOCpQ=="], + + "@oxc-resolver/binding-win32-ia32-msvc": ["@oxc-resolver/binding-win32-ia32-msvc@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.14.0.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-o54jYNSfGdPxHSvXEhZg8FOV3K99mJ1f7hb1alRFb+Yec1GQXNrJXxZPIxNMYeFT13kwAWB7zuQ0HZLnDHFxfw=="], + + "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.14.0.tgz", { "os": "win32", "cpu": "x64" }, "sha512-j97icaORyM6A7GjgmUzfn7V+KGzVvctRA+eAlJb0c2OQNaETFxl6BXZdnGBDb+6oA0Y4Sr/wnekd1kQ0aVyKGg=="], + + "@phenomnomnominal/tsquery": ["@phenomnomnominal/tsquery@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", { "dependencies": { "esquery": "^1.4.0" }, "peerDependencies": { "typescript": "^3 || ^4 || ^5" } }, "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + + "@pkgr/core": ["@pkgr/core@0.2.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@pkgr/core/-/core-0.2.9.tgz", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], + + "@polka/url": ["@polka/url@1.0.0-next.29", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@polka/url/-/url-1.0.0-next.29.tgz", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + + "@puppeteer/browsers": ["@puppeteer/browsers@2.10.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@puppeteer/browsers/-/browsers-2.10.13.tgz", { "dependencies": { "debug": "^4.4.3", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.3", "tar-fs": "^3.1.1", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-a9Ruw3j3qlnB5a/zHRTkruppynxqaeE4H9WNj5eYGRWqw0ZauZ23f4W2ARf3hghF5doozyD+CRtt7XSYuYRI/Q=="], + + "@quansync/fs": ["@quansync/fs@0.1.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@quansync/fs/-/fs-0.1.5.tgz", { "dependencies": { "quansync": "^0.2.11" } }, "sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.51.tgz", { "os": "android", "cpu": "arm64" }, "sha512-Ctn8FUXKWWQI9pWC61P1yumS9WjQtelNS9riHwV7oCkknPGaAry4o7eFx2KgoLMnI2BgFJYpW7Im8/zX3BuONg=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.51.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-EL1aRW2Oq15ShUEkBPsDtLMO8GTqfb/ktM/dFaVzXKQiEE96Ss6nexMgfgQrg8dGnNpndFyffVDb5IdSibsu1g=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.51.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-uGtYKlFen9pMIPvkHPWZVDtmYhMQi5g5Ddsndg1gf3atScKYKYgs5aDP4DhHeTwGXQglhfBG7lEaOIZ4UAIWww=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.51.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-JRoVTQtHYbZj1P07JLiuTuXjiBtIa7ag7/qgKA6CIIXnAcdl4LrOf7nfDuHPJcuRKaP5dzecMgY99itvWfmUFQ=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.51.tgz", { "os": "linux", "cpu": "arm" }, "sha512-BKATVnpPZ0TYBW9XfDwyd4kPGgvf964HiotIwUgpMrFOFYWqpZ+9ONNzMV4UFAYC7Hb5C2qgYQk/qj2OnAd4RQ=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.51.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-xLd7da5jkfbVsBCm1buIRdWtuXY8+hU3+6ESXY/Tk5X5DPHaifrUblhYDgmA34dQt6WyNC2kfXGgrduPEvDI6Q=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.51.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-EQFXTgHxxTzv3t5EmjUP/DfxzFYx9sMndfLsYaAY4DWF6KsK1fXGYsiupif6qPTViPC9eVmRm78q0pZU/kuIPg=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.51.tgz", { "os": "linux", "cpu": "x64" }, "sha512-p5P6Xpa68w3yFaAdSzIZJbj+AfuDnMDqNSeglBXM7UlJT14Q4zwK+rV+8Mhp9MiUb4XFISZtbI/seBprhkQbiQ=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.51.tgz", { "os": "linux", "cpu": "x64" }, "sha512-sNVVyLa8HB8wkFipdfz1s6i0YWinwpbMWk5hO5S+XAYH2UH67YzUT13gs6wZTKg2x/3gtgXzYnHyF5wMIqoDAw=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.51.tgz", { "os": "none", "cpu": "arm64" }, "sha512-e/JMTz9Q8+T3g/deEi8DK44sFWZWGKr9AOCW5e8C8SCVWzAXqYXAG7FXBWBNzWEZK0Rcwo9TQHTQ9Q0gXgdCaA=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.51.tgz", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.7" }, "cpu": "none" }, "sha512-We3LWqSu6J9s5Y0MK+N7fUiiu37aBGPG3Pc347EoaROuAwkCS2u9xJ5dpIyLW4B49CIbS3KaPmn4kTgPb3EyPw=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.51.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-fj56buHRuMM+r/cb6ZYfNjNvO/0xeFybI6cTkTROJatdP4fvmQ1NS8D/Lm10FCSDEOkqIz8hK3TGpbAThbPHsA=="], + + "@rolldown/binding-win32-ia32-msvc": ["@rolldown/binding-win32-ia32-msvc@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.51.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-fkqEqaeEx8AySXiDm54b/RdINb3C0VovzJA3osMhZsbn6FoD73H0AOIiaVAtGr6x63hefruVKTX8irAm4Jkt2w=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.51.tgz", { "os": "win32", "cpu": "x64" }, "sha512-CWuLG/HMtrVcjKGa0C4GnuxONrku89g0+CsH8nT0SNhOtREXuzwgjIXNJImpE/A/DMf9JF+1Xkrq/YRr+F/rCg=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.51.tgz", {}, "sha512-51/8cNXMrqWqX3o8DZidhwz1uYq0BhHDDSfVygAND1Skx5s1TDw3APSSxCMcFFedwgqGcx34gRouwY+m404BBQ=="], + + "@rollup/plugin-babel": ["@rollup/plugin-babel@6.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz", { "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@rollup/pluginutils": "^5.0.1" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["@types/babel__core", "rollup"] }, "sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA=="], + + "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@25.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", { "dependencies": { "@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" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A=="], + + "@rollup/plugin-image": ["@rollup/plugin-image@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/plugin-image/-/plugin-image-3.0.3.tgz", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "mini-svg-data-uri": "^1.4.4" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg=="], + + "@rollup/plugin-json": ["@rollup/plugin-json@6.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", { "dependencies": { "@rollup/pluginutils": "^5.1.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA=="], + + "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@15.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA=="], + + "@rollup/plugin-typescript": ["@rollup/plugin-typescript@12.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", { "dependencies": { "@rollup/pluginutils": "^5.1.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.14.0||^3.0.0||^4.0.0", "tslib": "*", "typescript": ">=3.7.0" }, "optionalPeers": ["rollup", "tslib"] }, "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", { "os": "android", "cpu": "arm" }, "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", { "os": "android", "cpu": "arm64" }, "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", { "os": "freebsd", "cpu": "arm64" }, "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", { "os": "linux", "cpu": "arm" }, "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", { "os": "linux", "cpu": "arm" }, "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", { "os": "linux", "cpu": "none" }, "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", { "os": "linux", "cpu": "none" }, "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", { "os": "linux", "cpu": "none" }, "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", { "os": "linux", "cpu": "x64" }, "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", { "os": "linux", "cpu": "x64" }, "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", { "os": "none", "cpu": "arm64" }, "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", { "os": "win32", "cpu": "x64" }, "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", { "os": "win32", "cpu": "x64" }, "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA=="], + + "@rtsao/scc": ["@rtsao/scc@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rtsao/scc/-/scc-1.1.0.tgz", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], + + "@sap/cds": ["@sap/cds@8.9.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/cds/-/cds-8.9.7.tgz", { "dependencies": { "@sap/cds-compiler": "^5", "@sap/cds-fiori": "^1", "@sap/cds-foss": "^5.0.0" }, "peerDependencies": { "@eslint/js": "^9", "express": "^4", "tar": "^7" }, "optionalPeers": ["express", "tar"], "bin": { "cds-test": "bin/test.js", "cds-serve": "bin/serve.js", "cds-deploy": "lib/dbs/cds-deploy.js" } }, "sha512-dZyNenU5XFxMwpmDsjoLscPwIceDtc+0vFHtIRzNQPQissywm1sWBpxjO8QpwcAq1GpIeTdgqFZIeZ6bT6NzQg=="], + + "@sap/cds-compiler": ["@sap/cds-compiler@5.9.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/cds-compiler/-/cds-compiler-5.9.12.tgz", { "dependencies": { "antlr4": "4.9.3" }, "bin": { "cdsc": "bin/cdsc.js", "cdshi": "bin/cdshi.js", "cdsse": "bin/cdsse.js" } }, "sha512-1KrNgO0aJ0CCtCGdCvgyQycBXMfBk7uWE/D1jQabW8WnYp9e4bsdv+GFPtUpFuXgysADzziUEhXDU82zxgRnnA=="], + + "@sap/cds-dk": ["@sap/cds-dk@8.9.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/cds-dk/-/cds-dk-8.9.10.tgz", { "dependencies": { "@cap-js/asyncapi": "^1.0.0", "@cap-js/openapi": "^1.0.0", "@sap/cds": "^7 || ^8", "@sap/cds-foss": "^5.0.0", "@sap/cds-mtxs": "^1.9.0 || ^2", "@sap/eslint-plugin-cds": "^3.0.1", "@sap/hdi-deploy": "^5", "axios": "^1", "eslint": "^9", "express": "^4.17.3", "hdb": "^0", "livereload-js": "^4.0.1", "mustache": "^4.0.1", "node-watch": ">=0.7", "ws": "^8.4.2", "xml-js": "^1.6.11" }, "optionalDependencies": { "@cap-js/sqlite": "^1" }, "bin": { "cds": "bin/cds.js", "cds-ts": "bin/cds-ts.js", "cds-tsx": "bin/cds-tsx.js" } }, "sha512-xVOtP0MO5PY5j8asB5GAWFeO3VzJwwJVkqBXeZAQldi9GQBMSgTxs6m1ehed/7AlJ1D8EqK/v9IEHUdL/ZQ/Eg=="], + + "@sap/cds-fiori": ["@sap/cds-fiori@1.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/cds-fiori/-/cds-fiori-1.4.1.tgz", { "peerDependencies": { "@sap/cds": ">=7.6", "express": ">=4" } }, "sha512-laoK+xfJRcJy+zWzUdgqOOy5V6lpUi9I3CN8yeGmMIktQ1ZsXc52814WvoWt4TWchY1/+rNYuWDl9Q8ttj4Y4w=="], + + "@sap/cds-foss": ["@sap/cds-foss@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/cds-foss/-/cds-foss-5.0.1.tgz", { "dependencies": { "big.js": "^6.1.1", "generic-pool": "^3.8.2", "xmlbuilder": "^15.1.1", "yaml": "^2.2.2" } }, "sha512-q6h7LkEx6w9LswCIQzJJ2mnoyeGS8jrmBXN4I4+aECRL60mkLskoqGetot+2tX2xXGxCYJuo5v1dtSafwBqTRQ=="], + + "@sap/cds-mtxs": ["@sap/cds-mtxs@2.7.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/cds-mtxs/-/cds-mtxs-2.7.6.tgz", { "dependencies": { "@sap/hdi-deploy": ">=4", "axios": "^1" }, "bin": { "cds-mtx": "bin/cds-mtx.js", "cds-mtx-migrate": "bin/cds-mtx-migrate.js" } }, "sha512-LcWRJozl9SDnMMrWec/mApDoWTb4lb8qGyN7hbxxnO59PnUQcalE3fLup//EiNSZvKHzDxM/FRpQLl8letBz5g=="], + + "@sap/eslint-plugin-cds": ["@sap/eslint-plugin-cds@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/eslint-plugin-cds/-/eslint-plugin-cds-3.2.0.tgz", { "dependencies": { "@sap/cds": ">=7", "semver": "^7.7.1" }, "peerDependencies": { "eslint": ">=8" } }, "sha512-S0DTQKi7ltj8RwKkrDBYblTDWCeCpdftx3Kh5OFMEq0SBsUdWnpRrKfTVWQuqBQPqGkcuei9yAh0zvX/4Xkjig=="], + + "@sap/hdi": ["@sap/hdi@4.8.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/hdi/-/hdi-4.8.0.tgz", { "dependencies": { "async": "^3.2.3" }, "peerDependencies": { "@sap/hana-client": "^2 >= 2.5", "hdb": "^2 || ^0" }, "optionalPeers": ["@sap/hana-client", "hdb"] }, "sha512-tkJmY2ffm6mt4/LFwRBihlQkMxNAXa3ngvRe2N/6+qLIsUNdrH/M03S5mkygXq56K+KoVVZYuradajCusMWwsw=="], + + "@sap/hdi-deploy": ["@sap/hdi-deploy@5.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/hdi-deploy/-/hdi-deploy-5.5.1.tgz", { "dependencies": { "@sap/hdi": "^4.8.0", "@sap/xsenv": "^5.2.0", "async": "^3.2.6", "dotenv": "^16.4.5", "handlebars": "^4.7.8", "micromatch": "^4.0.8" }, "peerDependencies": { "@sap/hana-client": "^2 >= 2.6", "hdb": "^2 || ^0" }, "optionalPeers": ["@sap/hana-client", "hdb"] }, "sha512-5r9SIkXX7cO+MwRFF32O566sMx6LP1mLin0eT9F+Adqy+0SrdwkWv4JslQzYetiWLuNsfqQljcao62alaxts8A=="], + + "@sap/xsenv": ["@sap/xsenv@5.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sap/xsenv/-/xsenv-5.6.1.tgz", { "dependencies": { "debug": "4.4.0", "node-cache": "^5.1.2", "verror": "1.10.1" } }, "sha512-4pDpsYLNJsLUBWtTSG+TJ8ul5iY0dWDyJgTy2H/WZGZww9CSPLP/39x+syDDTjkggsmZAlo9t7y9TiXMmtAunw=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.41", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sinclair/typebox/-/typebox-0.34.41.tgz", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "@sindresorhus/is": ["@sindresorhus/is@5.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sindresorhus/is/-/is-5.6.0.tgz", {}, "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g=="], + + "@sinonjs/commons": ["@sinonjs/commons@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sinonjs/commons/-/commons-3.0.1.tgz", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ=="], + + "@sinonjs/fake-timers": ["@sinonjs/fake-timers@13.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", { "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw=="], + + "@swc-node/core": ["@swc-node/core@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc-node/core/-/core-1.14.1.tgz", { "peerDependencies": { "@swc/core": ">= 1.13.3", "@swc/types": ">= 0.1" } }, "sha512-jrt5GUaZUU6cmMS+WTJEvGvaB6j1YNKPHPzC2PUi2BjaFbtxURHj6641Az6xN7b665hNniAIdvjxWcRml5yCnw=="], + + "@swc-node/register": ["@swc-node/register@1.9.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc-node/register/-/register-1.9.2.tgz", { "dependencies": { "@swc-node/core": "^1.13.1", "@swc-node/sourcemap-support": "^0.5.0", "colorette": "^2.0.20", "debug": "^4.3.4", "pirates": "^4.0.6", "tslib": "^2.6.2" }, "peerDependencies": { "@swc/core": ">= 1.4.13", "typescript": ">= 4.3" } }, "sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA=="], + + "@swc-node/sourcemap-support": ["@swc-node/sourcemap-support@0.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz", { "dependencies": { "source-map-support": "^0.5.21", "tslib": "^2.6.3" } }, "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg=="], + + "@swc/cli": ["@swc/cli@0.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/cli/-/cli-0.6.0.tgz", { "dependencies": { "@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" }, "peerDependencies": { "@swc/core": "^1.2.66", "chokidar": "^4.0.1" }, "optionalPeers": ["chokidar"], "bin": { "swc": "bin/swc.js", "swcx": "bin/swcx.js", "spack": "bin/spack.js" } }, "sha512-Q5FsI3Cw0fGMXhmsg7c08i4EmXCrcl+WnAxb6LYOLHw4JFFC3yzmx9LaXZ7QMbA+JZXbigU2TirI7RAfO0Qlnw=="], + + "@swc/core": ["@swc/core@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core/-/core-1.13.21.tgz", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.13.21", "@swc/core-darwin-x64": "1.13.21", "@swc/core-linux-arm-gnueabihf": "1.13.21", "@swc/core-linux-arm64-gnu": "1.13.21", "@swc/core-linux-arm64-musl": "1.13.21", "@swc/core-linux-x64-gnu": "1.13.21", "@swc/core-linux-x64-musl": "1.13.21", "@swc/core-win32-arm64-msvc": "1.13.21", "@swc/core-win32-ia32-msvc": "1.13.21", "@swc/core-win32-x64-msvc": "1.13.21" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-umBaSb65O1v6Lt8RV3o5srw0nKr25amf/yRIGFPug63sAerL9n2UkmfGywA1l1aN81W7faXIynF0JmlQ2wPSdw=="], + + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.21.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-0jaz9r7f0PDK8OyyVooadv8dkFlQmVmBK6DtAnWSRjkCbNt4sdqsc9ZkyEDJXaxOVcMQ3pJx/Igniyw5xqACLw=="], + + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-darwin-x64/-/core-darwin-x64-1.13.21.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-pLeZn+NTGa7oW/ysD6oM82BjKZl71WNJR9BKXRsOhrNQeUWv55DCoZT2P4DzeU5Xgjmos+iMoDLg/9R6Ngc0PA=="], + + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.21.tgz", { "os": "linux", "cpu": "arm" }, "sha512-p9aYzTmP7qVDPkXxnbekOfbT11kxnPiuLrUbgpN/vn6sxXDCObMAiY63WlDR0IauBK571WUdmgb04goe/xTQWw=="], + + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.21.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-yRqFoGlCwEX1nS7OajBE23d0LPeONmFAgoe4rgRYvaUb60qGxIJoMMdvF2g3dum9ZyVDYAb3kP09hbXFbMGr4A=="], + + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.21.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-wu5EGA86gtdYMW69eU80jROzArzD3/6G6zzK0VVR+OFt/0zqbajiiszIpaniOVACObLfJEcShQ05B3q0+CpUEg=="], + + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.21.tgz", { "os": "linux", "cpu": "x64" }, "sha512-AoGGVPNXH3C4S7WlJOxN1nGW5nj//J9uKysS7CIBotRmHXfHO4wPK3TVFRTA4cuouAWBBn7O8m3A99p/GR+iaw=="], + + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.21.tgz", { "os": "linux", "cpu": "x64" }, "sha512-cBy2amuDuxMZnEq16MqGu+DUlEFqI+7F/OACNlk7zEJKq48jJKGEMqJz3X2ucJE5jqUIg6Pos6Uo/y+vuWQymQ=="], + + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.21.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-2xfR5gnqBGOMOlY3s1QiFTXZaivTILMwX67FD2uzT6OCbT/3lyAM/4+3BptBXD8pUkkOGMFLsdeHw4fbO1GrpQ=="], + + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.21.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-0pkpgKlBDwUImWTQxLakKbzZI6TIGVVAxk658oxrY8VK+hxRy2iezFY6m5Urmeds47M/cnW3dO+OY4C2caOF8A=="], + + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.13.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.21.tgz", { "os": "win32", "cpu": "x64" }, "sha512-DAnIw2J95TOW4Kr7NBx12vlZPW3QndbpFMmuC7x+fPoozoLpEscaDkiYhk7/sTtY9pubPMfHFPBORlbqyQCfOQ=="], + + "@swc/counter": ["@swc/counter@0.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/counter/-/counter-0.1.3.tgz", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], + + "@swc/helpers": ["@swc/helpers@0.5.17", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/helpers/-/helpers-0.5.17.tgz", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + + "@swc/jest": ["@swc/jest@0.2.39", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/jest/-/jest-0.2.39.tgz", { "dependencies": { "@jest/create-cache-key-function": "^30.0.0", "@swc/counter": "^0.1.3", "jsonc-parser": "^3.2.0" }, "peerDependencies": { "@swc/core": "*" } }, "sha512-eyokjOwYd0Q8RnMHri+8/FS1HIrIUKK/sRrFp8c1dThUOfNeCWbLmBP1P5VsKdvmkd25JaH+OKYwEYiAYg9YAA=="], + + "@swc/types": ["@swc/types@0.1.25", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@swc/types/-/types-0.1.25.tgz", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g=="], + + "@szmarczak/http-timer": ["@szmarczak/http-timer@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", { "dependencies": { "defer-to-connect": "^2.0.1" } }, "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw=="], + + "@tokenizer/inflate": ["@tokenizer/inflate@0.2.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tokenizer/inflate/-/inflate-0.2.7.tgz", { "dependencies": { "debug": "^4.4.0", "fflate": "^0.8.2", "token-types": "^6.0.0" } }, "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tokenizer/token/-/token-0.3.0.tgz", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + + "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], + + "@trysound/sax": ["@trysound/sax@0.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@trysound/sax/-/sax-0.2.0.tgz", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="], + + "@ts-morph/common": ["@ts-morph/common@0.28.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@ts-morph/common/-/common-0.28.1.tgz", { "dependencies": { "minimatch": "^10.0.1", "path-browserify": "^1.0.1", "tinyglobby": "^0.2.14" } }, "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g=="], + + "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tsconfig/node10/-/node10-1.0.11.tgz", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="], + + "@tsconfig/node12": ["@tsconfig/node12@1.0.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tsconfig/node12/-/node12-1.0.11.tgz", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="], + + "@tsconfig/node14": ["@tsconfig/node14@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tsconfig/node14/-/node14-1.0.3.tgz", {}, "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="], + + "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tsconfig/node16/-/node16-1.0.4.tgz", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/babel__core/-/babel__core-7.20.5.tgz", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/babel__generator/-/babel__generator-7.27.0.tgz", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/babel__template/-/babel__template-7.4.4.tgz", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/body-parser": ["@types/body-parser@1.19.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/body-parser/-/body-parser-1.19.6.tgz", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], + + "@types/chai": ["@types/chai@5.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/chai/-/chai-5.2.3.tgz", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + + "@types/connect": ["@types/connect@3.4.38", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/connect/-/connect-3.4.38.tgz", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], + + "@types/deep-eql": ["@types/deep-eql@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/deep-eql/-/deep-eql-4.0.2.tgz", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], + + "@types/eslint": ["@types/eslint@9.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/eslint/-/eslint-9.6.1.tgz", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag=="], + + "@types/eslint-scope": ["@types/eslint-scope@3.7.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="], + + "@types/estree": ["@types/estree@1.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/estree/-/estree-1.0.8.tgz", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/express": ["@types/express@4.17.25", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/express/-/express-4.17.25.tgz", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "^1" } }, "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw=="], + + "@types/express-serve-static-core": ["@types/express-serve-static-core@4.19.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg=="], + + "@types/fs-extra": ["@types/fs-extra@8.1.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/fs-extra/-/fs-extra-8.1.5.tgz", { "dependencies": { "@types/node": "*" } }, "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ=="], + + "@types/glob": ["@types/glob@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/glob/-/glob-7.2.0.tgz", { "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA=="], + + "@types/http-cache-semantics": ["@types/http-cache-semantics@4.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", {}, "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="], + + "@types/http-errors": ["@types/http-errors@2.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/http-errors/-/http-errors-2.0.5.tgz", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], + + "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], + + "@types/istanbul-lib-report": ["@types/istanbul-lib-report@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", { "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA=="], + + "@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="], + + "@types/jest": ["@types/jest@30.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/jest/-/jest-30.0.0.tgz", { "dependencies": { "expect": "^30.0.0", "pretty-format": "^30.0.0" } }, "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA=="], + + "@types/js-yaml": ["@types/js-yaml@4.0.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/js-yaml/-/js-yaml-4.0.9.tgz", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], + + "@types/jsdom": ["@types/jsdom@21.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/jsdom/-/jsdom-21.1.7.tgz", { "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", "parse5": "^7.0.0" } }, "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/json-schema/-/json-schema-7.0.15.tgz", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/json5": ["@types/json5@0.0.29", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/json5/-/json5-0.0.29.tgz", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], + + "@types/mime": ["@types/mime@1.3.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/mime/-/mime-1.3.5.tgz", {}, "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="], + + "@types/minimatch": ["@types/minimatch@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/minimatch/-/minimatch-6.0.0.tgz", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], + + "@types/node": ["@types/node@22.19.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/node/-/node-22.19.0.tgz", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA=="], + + "@types/parse-json": ["@types/parse-json@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/parse-json/-/parse-json-4.0.2.tgz", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], + + "@types/prop-types": ["@types/prop-types@15.7.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/prop-types/-/prop-types-15.7.15.tgz", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], + + "@types/qs": ["@types/qs@6.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/qs/-/qs-6.14.0.tgz", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="], + + "@types/range-parser": ["@types/range-parser@1.2.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/range-parser/-/range-parser-1.2.7.tgz", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], + + "@types/react": ["@types/react@18.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/react/-/react-18.3.0.tgz", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw=="], + + "@types/resolve": ["@types/resolve@1.20.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/resolve/-/resolve-1.20.2.tgz", {}, "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="], + + "@types/send": ["@types/send@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/send/-/send-1.2.1.tgz", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], + + "@types/serve-static": ["@types/serve-static@1.15.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/serve-static/-/serve-static-1.15.10.tgz", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw=="], + + "@types/stack-utils": ["@types/stack-utils@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/stack-utils/-/stack-utils-2.0.3.tgz", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], + + "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], + + "@types/yargs": ["@types/yargs@17.0.34", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/yargs/-/yargs-17.0.34.tgz", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A=="], + + "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], + + "@types/yauzl": ["@types/yauzl@2.10.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/yauzl/-/yauzl-2.10.3.tgz", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.43.0", "@typescript-eslint/type-utils": "8.43.0", "@typescript-eslint/utils": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.43.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/parser/-/parser-8.48.0.tgz", { "dependencies": { "@typescript-eslint/scope-manager": "8.48.0", "@typescript-eslint/types": "8.48.0", "@typescript-eslint/typescript-estree": "8.48.0", "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.48.0", "@typescript-eslint/types": "^8.48.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.48.0", "@typescript-eslint/visitor-keys": "8.48.0" } }, "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.48.0", "@typescript-eslint/typescript-estree": "8.48.0", "@typescript-eslint/utils": "8.48.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.48.0.tgz", {}, "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", { "dependencies": { "@typescript-eslint/project-service": "8.48.0", "@typescript-eslint/tsconfig-utils": "8.48.0", "@typescript-eslint/types": "8.48.0", "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4", "minimatch": "^9.0.4", "semver": "^7.6.0", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/utils/-/utils-8.48.0.tgz", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.48.0", "@typescript-eslint/types": "8.48.0", "@typescript-eslint/typescript-estree": "8.48.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.48.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.48.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg=="], + + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview/-/native-preview-7.0.0-dev.20251126.1.tgz", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20251126.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20251126.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20251126.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20251126.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20251126.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20251126.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20251126.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-gkE5m4UH5ld1wgGHvnmI2uWOvP8TJB5eUOx7lYZwarjXeC+viNf02PA/3HJn5rV/RyEfFhu/QvqwVd8vJ9M//A=="], + + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20251126.1.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-+AZBntY8ORv1fD/nBFExhJT6yWiALrNhnUIpjd0NzZhgwER1rOP8l62o5iiq8j7IQkVfbehTrqTVHVP6O1TIcA=="], + + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20251126.1.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-HNKJBryvqZbvEElbCaAGUoTJn+r9C5Umsq1dEPnZ9Ji/5kvCx3TVOLnck60BU/W7mV9e9fyFYdM+A5ZRgs4+kw=="], + + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20251126.1.tgz", { "os": "linux", "cpu": "arm" }, "sha512-ERyxlPWXXDIMxEQNdHn5tHO1d6aduoWv+VaO2hvypBROMtsFoPyHidWx2uxL4syL2TCfBHgH8wREwEq6fQeICg=="], + + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20251126.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-WAndZy6qB4ic1oB2FseXr/7zc8hbKjmqoq+4FBssle4OrsyaXPj8zbv2V/uZQUtcXrsAB30RaqWCOnUG9u1jug=="], + + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20251126.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-9ov4QkLRxjbdX5VyDtV1vRZWvs+GUujHvGmyxRIe/9pVBKCqyPBrHy8X/qw3/rSVjTOZELKMuwVAbkU/tNwMtw=="], + + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20251126.1.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-m1cCO89bWHfGiU7AyGC54pax3juhZXu9TYXe+IHZngpQZgW8XXdpso3p6Jv+xVh8MSyJJnRkS2p5eGcjW4dkYg=="], + + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20251126.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20251126.1.tgz", { "os": "win32", "cpu": "x64" }, "sha512-k4xenxGU7JhUtgya8VIb5f0+JTIysuuXeSjAQ00ODE0EbYsfnY7hgFyW8OAaHRaZa5FKsujg2jfvYY5nuugj+g=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], + + "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], + + "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="], + + "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="], + + "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="], + + "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="], + + "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="], + + "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="], + + "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="], + + "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="], + + "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="], + + "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="], + + "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="], + + "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="], + + "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="], + + "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="], + + "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="], + + "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="], + + "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], + + "@verdaccio/auth": ["@verdaccio/auth@8.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/auth/-/auth-8.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/config": "8.0.0-next-8.15", "@verdaccio/core": "8.0.0-next-8.15", "@verdaccio/loaders": "8.0.0-next-8.6", "@verdaccio/signature": "8.0.0-next-8.7", "@verdaccio/utils": "8.1.0-next-8.15", "debug": "4.4.0", "lodash": "4.17.21", "verdaccio-htpasswd": "13.0.0-next-8.15" } }, "sha512-vAfzGOHbPcPXMCI90jqm/qSZ1OUBnOGzudZA3+YtherncdwADekvXbdJlZVclcfmZ0sRbfVG5Xpf88aETiwfcw=="], + + "@verdaccio/commons-api": ["@verdaccio/commons-api@10.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/commons-api/-/commons-api-10.2.0.tgz", { "dependencies": { "http-errors": "2.0.0", "http-status-codes": "2.2.0" } }, "sha512-F/YZANu4DmpcEV0jronzI7v2fGVWkQ5Mwi+bVmV+ACJ+EzR0c9Jbhtbe5QyLUuzR97t8R5E/Xe53O0cc2LukdQ=="], + + "@verdaccio/config": ["@verdaccio/config@8.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/config/-/config-8.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/core": "8.0.0-next-8.15", "@verdaccio/utils": "8.1.0-next-8.15", "debug": "4.4.0", "js-yaml": "4.1.0", "lodash": "4.17.21", "minimatch": "7.4.6" } }, "sha512-oEzQB+xeqaFAy54veMshqpt1hlZCYNkqoKuwkt7O8J43Fo/beiLluKUVneXckzi+pg1yvvGT7lNCbvuUQrxxQg=="], + + "@verdaccio/core": ["@verdaccio/core@8.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/core/-/core-8.0.0-next-8.15.tgz", { "dependencies": { "ajv": "8.17.1", "core-js": "3.40.0", "http-errors": "2.0.0", "http-status-codes": "2.3.0", "process-warning": "1.0.0", "semver": "7.7.1" } }, "sha512-d5r/ZSkCri7s1hvV35enptquV5LJ81NqMYJnsjuryIUnvwn1yaqLlcdd6zIL08unzCSr7qDdUAdwGRRm6PKzng=="], + + "@verdaccio/file-locking": ["@verdaccio/file-locking@10.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/file-locking/-/file-locking-10.3.1.tgz", { "dependencies": { "lockfile": "1.0.4" } }, "sha512-oqYLfv3Yg3mAgw9qhASBpjD50osj2AX4IwbkUtyuhhKGyoFU9eZdrbeW6tpnqUnj6yBMtAPm2eGD4BwQuX400g=="], + + "@verdaccio/loaders": ["@verdaccio/loaders@8.0.0-next-8.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/loaders/-/loaders-8.0.0-next-8.6.tgz", { "dependencies": { "debug": "4.4.0", "lodash": "4.17.21" } }, "sha512-yuqD8uAZJcgzuNHjV6C438UNT5r2Ai9+SnUlO34AHZdWSYcluO3Zj5R3p5uf+C7YPCE31pUD27wBU74xVbUoBw=="], + + "@verdaccio/local-storage-legacy": ["@verdaccio/local-storage-legacy@11.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/local-storage-legacy/-/local-storage-legacy-11.0.2.tgz", { "dependencies": { "@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" } }, "sha512-7AXG7qlcVFmF+Nue2oKaraprGRtaBvrQIOvc/E89+7hAe399V01KnZI6E/ET56u7U9fq0MSlp92HBcdotlpUXg=="], + + "@verdaccio/logger": ["@verdaccio/logger@8.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/logger/-/logger-8.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/logger-commons": "8.0.0-next-8.15", "pino": "9.6.0" } }, "sha512-3gjhqvB87JUNDHFMN3YG4IweS9EgbCpAWZatNYzcoIWOoGiEaFQQBSM592CaFiI0yf8acyqWkNa1V95L1NMbRg=="], + + "@verdaccio/logger-commons": ["@verdaccio/logger-commons@8.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/logger-commons/-/logger-commons-8.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/core": "8.0.0-next-8.15", "@verdaccio/logger-prettify": "8.0.0-next-8.2", "colorette": "2.0.20", "debug": "4.4.0" } }, "sha512-nF7VgBC2cl5ufv+mZEwBHHyZFb1F0+kVkuRMf3Tyk+Qp4lXilC9MRZ0oc+RnzsDbNmJ6IZHgHNbs6aJrNfaRGg=="], + + "@verdaccio/logger-prettify": ["@verdaccio/logger-prettify@8.0.0-next-8.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/logger-prettify/-/logger-prettify-8.0.0-next-8.2.tgz", { "dependencies": { "colorette": "2.0.20", "dayjs": "1.11.13", "lodash": "4.17.21", "pino-abstract-transport": "1.2.0", "sonic-boom": "3.8.1" } }, "sha512-WMXnZPLw5W7GSIQE8UOTp6kRIwiTmnnoJbMmyMlGiNrsRaFKTqk09R5tKUgOyGgd4Lu6yncLbmdm5UjAuwHf1Q=="], + + "@verdaccio/middleware": ["@verdaccio/middleware@8.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/middleware/-/middleware-8.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/config": "8.0.0-next-8.15", "@verdaccio/core": "8.0.0-next-8.15", "@verdaccio/url": "13.0.0-next-8.15", "@verdaccio/utils": "8.1.0-next-8.15", "debug": "4.4.0", "express": "4.21.2", "express-rate-limit": "5.5.1", "lodash": "4.17.21", "lru-cache": "7.18.3", "mime": "2.6.0" } }, "sha512-xsCLGbnhqcYwE8g/u9wxNLfDcESpr9ptEZ8Ce7frVTphU7kYIL48QCDPMzug7U+AguNtCq4v4zcoY1PaOQ8mgw=="], + + "@verdaccio/search-indexer": ["@verdaccio/search-indexer@8.0.0-next-8.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/search-indexer/-/search-indexer-8.0.0-next-8.4.tgz", {}, "sha512-Oea9m9VDqdlDPyQ9+fpcxZk0sIYH2twVK+YbykHpSYpjZRzz9hJfIr/uUwAgpWq83zAl2YDbz4zR3TjzjrWQig=="], + + "@verdaccio/signature": ["@verdaccio/signature@8.0.0-next-8.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/signature/-/signature-8.0.0-next-8.7.tgz", { "dependencies": { "@verdaccio/config": "8.0.0-next-8.15", "debug": "4.4.0", "jsonwebtoken": "9.0.2" } }, "sha512-sqP+tNzUtVIwUtt1ZHwYoxsO3roDLK7GW8c8Hj0SNaON+9ele9z4NBhaor+g95zRuLy6xtw/RgOvpyLon/vPrA=="], + + "@verdaccio/streams": ["@verdaccio/streams@10.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/streams/-/streams-10.2.1.tgz", {}, "sha512-OojIG/f7UYKxC4dYX8x5ax8QhRx1b8OYUAMz82rUottCuzrssX/4nn5QE7Ank0DUSX3C9l/HPthc4d9uKRJqJQ=="], + + "@verdaccio/tarball": ["@verdaccio/tarball@13.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/tarball/-/tarball-13.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/core": "8.0.0-next-8.15", "@verdaccio/url": "13.0.0-next-8.15", "@verdaccio/utils": "8.1.0-next-8.15", "debug": "4.4.0", "gunzip-maybe": "^1.4.2", "lodash": "4.17.21", "tar-stream": "^3.1.7" } }, "sha512-oSNmq7zD/iPIC5HpJbOJjW/lb0JV9k3jLwI6sG7kPgm+UIxVAOV4fKQOAD18HpHl/WjkF247NA6zGlAB94Habw=="], + + "@verdaccio/ui-theme": ["@verdaccio/ui-theme@8.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/ui-theme/-/ui-theme-8.0.0-next-8.15.tgz", {}, "sha512-k9BAM7rvbUqB2JPReNgXKUVTzBkdmIrNw0f6/7uyO+9cp7eVuarrPBnVF0oMc7jzVNBZRCpUksrhMZ0KwDZTpw=="], + + "@verdaccio/url": ["@verdaccio/url@13.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/url/-/url-13.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/core": "8.0.0-next-8.15", "debug": "4.4.0", "lodash": "4.17.21", "validator": "13.12.0" } }, "sha512-1N/dGhw7cZMhupf/Xlm73beiL3oCaAiyo9DTumjF3aTcJnipVcT1hoj6CSj9RIX54824rUK9WVmo83dk0KPnjw=="], + + "@verdaccio/utils": ["@verdaccio/utils@8.1.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/utils/-/utils-8.1.0-next-8.15.tgz", { "dependencies": { "@verdaccio/core": "8.0.0-next-8.15", "lodash": "4.17.21", "minimatch": "7.4.6", "semver": "7.7.1" } }, "sha512-efg/bunOUMVXV+MlljJCrpuT+OQRrQS4wJyGL92B3epUGlgZ8DXs+nxN5v59v1a6AocAdSKwHgZS0g9txmBhOg=="], + + "@vitest/coverage-v8": ["@vitest/coverage-v8@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", "ast-v8-to-istanbul": "^0.3.3", "debug": "^4.4.1", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", "magic-string": "^0.30.17", "magicast": "^0.3.5", "std-env": "^3.9.0", "test-exclude": "^7.0.1", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "@vitest/browser": "3.2.4", "vitest": "3.2.4" }, "optionalPeers": ["@vitest/browser"] }, "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ=="], + + "@vitest/expect": ["@vitest/expect@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/expect/-/expect-3.2.4.tgz", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "@vitest/mocker": ["@vitest/mocker@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/mocker/-/mocker-3.2.4.tgz", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + + "@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "@vitest/runner": ["@vitest/runner@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/runner/-/runner-3.2.4.tgz", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + + "@vitest/snapshot": ["@vitest/snapshot@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/snapshot/-/snapshot-3.2.4.tgz", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + + "@vitest/spy": ["@vitest/spy@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/spy/-/spy-3.2.4.tgz", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "@vitest/ui": ["@vitest/ui@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/ui/-/ui-3.2.4.tgz", { "dependencies": { "@vitest/utils": "3.2.4", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", "sirv": "^3.0.1", "tinyglobby": "^0.2.14", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "vitest": "3.2.4" } }, "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA=="], + + "@vitest/utils": ["@vitest/utils@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@vitest/utils/-/utils-3.2.4.tgz", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/ast/-/ast-1.14.1.tgz", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], + + "@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", {}, "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA=="], + + "@webassemblyjs/helper-api-error": ["@webassemblyjs/helper-api-error@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", {}, "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ=="], + + "@webassemblyjs/helper-buffer": ["@webassemblyjs/helper-buffer@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", {}, "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA=="], + + "@webassemblyjs/helper-numbers": ["@webassemblyjs/helper-numbers@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", { "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA=="], + + "@webassemblyjs/helper-wasm-bytecode": ["@webassemblyjs/helper-wasm-bytecode@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", {}, "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA=="], + + "@webassemblyjs/helper-wasm-section": ["@webassemblyjs/helper-wasm-section@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/wasm-gen": "1.14.1" } }, "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw=="], + + "@webassemblyjs/ieee754": ["@webassemblyjs/ieee754@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", { "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw=="], + + "@webassemblyjs/leb128": ["@webassemblyjs/leb128@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", { "dependencies": { "@xtuc/long": "4.2.2" } }, "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw=="], + + "@webassemblyjs/utf8": ["@webassemblyjs/utf8@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", {}, "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ=="], + + "@webassemblyjs/wasm-edit": ["@webassemblyjs/wasm-edit@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/helper-wasm-section": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-opt": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1", "@webassemblyjs/wast-printer": "1.14.1" } }, "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ=="], + + "@webassemblyjs/wasm-gen": ["@webassemblyjs/wasm-gen@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg=="], + + "@webassemblyjs/wasm-opt": ["@webassemblyjs/wasm-opt@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1" } }, "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw=="], + + "@webassemblyjs/wasm-parser": ["@webassemblyjs/wasm-parser@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ=="], + + "@webassemblyjs/wast-printer": ["@webassemblyjs/wast-printer@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw=="], + + "@xhmikosr/archive-type": ["@xhmikosr/archive-type@7.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/archive-type/-/archive-type-7.1.0.tgz", { "dependencies": { "file-type": "^20.5.0" } }, "sha512-xZEpnGplg1sNPyEgFh0zbHxqlw5dtYg6viplmWSxUj12+QjU9SKu3U/2G73a15pEjLaOqTefNSZ1fOPUOT4Xgg=="], + + "@xhmikosr/bin-check": ["@xhmikosr/bin-check@7.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/bin-check/-/bin-check-7.1.0.tgz", { "dependencies": { "execa": "^5.1.1", "isexe": "^2.0.0" } }, "sha512-y1O95J4mnl+6MpVmKfMYXec17hMEwE/yeCglFNdx+QvLLtP0yN4rSYcbkXnth+lElBuKKek2NbvOfOGPpUXCvw=="], + + "@xhmikosr/bin-wrapper": ["@xhmikosr/bin-wrapper@13.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/bin-wrapper/-/bin-wrapper-13.2.0.tgz", { "dependencies": { "@xhmikosr/bin-check": "^7.1.0", "@xhmikosr/downloader": "^15.2.0", "@xhmikosr/os-filter-obj": "^3.0.0", "bin-version-check": "^5.1.0" } }, "sha512-t9U9X0sDPRGDk5TGx4dv5xiOvniVJpXnfTuynVKwHgtib95NYEw4MkZdJqhoSiz820D9m0o6PCqOPMXz0N9fIw=="], + + "@xhmikosr/decompress": ["@xhmikosr/decompress@10.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/decompress/-/decompress-10.2.0.tgz", { "dependencies": { "@xhmikosr/decompress-tar": "^8.1.0", "@xhmikosr/decompress-tarbz2": "^8.1.0", "@xhmikosr/decompress-targz": "^8.1.0", "@xhmikosr/decompress-unzip": "^7.1.0", "graceful-fs": "^4.2.11", "strip-dirs": "^3.0.0" } }, "sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg=="], + + "@xhmikosr/decompress-tar": ["@xhmikosr/decompress-tar@8.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/decompress-tar/-/decompress-tar-8.1.0.tgz", { "dependencies": { "file-type": "^20.5.0", "is-stream": "^2.0.1", "tar-stream": "^3.1.7" } }, "sha512-m0q8x6lwxenh1CrsTby0Jrjq4vzW/QU1OLhTHMQLEdHpmjR1lgahGz++seZI0bXF3XcZw3U3xHfqZSz+JPP2Gg=="], + + "@xhmikosr/decompress-tarbz2": ["@xhmikosr/decompress-tarbz2@8.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-8.1.0.tgz", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "file-type": "^20.5.0", "is-stream": "^2.0.1", "seek-bzip": "^2.0.0", "unbzip2-stream": "^1.4.3" } }, "sha512-aCLfr3A/FWZnOu5eqnJfme1Z1aumai/WRw55pCvBP+hCGnTFrcpsuiaVN5zmWTR53a8umxncY2JuYsD42QQEbw=="], + + "@xhmikosr/decompress-targz": ["@xhmikosr/decompress-targz@8.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/decompress-targz/-/decompress-targz-8.1.0.tgz", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "file-type": "^20.5.0", "is-stream": "^2.0.1" } }, "sha512-fhClQ2wTmzxzdz2OhSQNo9ExefrAagw93qaG1YggoIz/QpI7atSRa7eOHv4JZkpHWs91XNn8Hry3CwUlBQhfPA=="], + + "@xhmikosr/decompress-unzip": ["@xhmikosr/decompress-unzip@7.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/decompress-unzip/-/decompress-unzip-7.1.0.tgz", { "dependencies": { "file-type": "^20.5.0", "get-stream": "^6.0.1", "yauzl": "^3.1.2" } }, "sha512-oqTYAcObqTlg8owulxFTqiaJkfv2SHsxxxz9Wg4krJAHVzGWlZsU8tAB30R6ow+aHrfv4Kub6WQ8u04NWVPUpA=="], + + "@xhmikosr/downloader": ["@xhmikosr/downloader@15.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/downloader/-/downloader-15.2.0.tgz", { "dependencies": { "@xhmikosr/archive-type": "^7.1.0", "@xhmikosr/decompress": "^10.2.0", "content-disposition": "^0.5.4", "defaults": "^2.0.2", "ext-name": "^5.0.0", "file-type": "^20.5.0", "filenamify": "^6.0.0", "get-stream": "^6.0.1", "got": "^13.0.0" } }, "sha512-lAqbig3uRGTt0sHNIM4vUG9HoM+mRl8K28WuYxyXLCUT6pyzl4Y4i0LZ3jMEsCYZ6zjPZbO9XkG91OSTd4si7g=="], + + "@xhmikosr/os-filter-obj": ["@xhmikosr/os-filter-obj@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xhmikosr/os-filter-obj/-/os-filter-obj-3.0.0.tgz", { "dependencies": { "arch": "^3.0.0" } }, "sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A=="], + + "@xmldom/xmldom": ["@xmldom/xmldom@0.9.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xmldom/xmldom/-/xmldom-0.9.8.tgz", {}, "sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A=="], + + "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xtuc/ieee754/-/ieee754-1.2.0.tgz", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], + + "@xtuc/long": ["@xtuc/long@4.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@xtuc/long/-/long-4.2.2.tgz", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], + + "@yarnpkg/lockfile": ["@yarnpkg/lockfile@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", {}, "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="], + + "@yarnpkg/parsers": ["@yarnpkg/parsers@3.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@yarnpkg/parsers/-/parsers-3.0.2.tgz", { "dependencies": { "js-yaml": "^3.10.0", "tslib": "^2.4.0" } }, "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA=="], + + "@zkochan/js-yaml": ["@zkochan/js-yaml@0.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ=="], + + "JSONStream": ["JSONStream@1.3.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/JSONStream/-/JSONStream-1.3.5.tgz", { "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "./bin.js" } }, "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ=="], + + "abort-controller": ["abort-controller@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/abort-controller/-/abort-controller-3.0.0.tgz", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + + "accepts": ["accepts@1.3.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/accepts/-/accepts-1.3.8.tgz", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], + + "acorn": ["acorn@8.15.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/acorn/-/acorn-8.15.0.tgz", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "acorn-import-phases": ["acorn-import-phases@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "acorn-walk": ["acorn-walk@8.3.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/acorn-walk/-/acorn-walk-8.3.4.tgz", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], + + "address": ["address@1.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/address/-/address-1.2.2.tgz", {}, "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA=="], + + "adt-fixtures": ["adt-fixtures@workspace:packages/adt-fixtures"], + + "agent-base": ["agent-base@7.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/agent-base/-/agent-base-7.1.4.tgz", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + + "ajv": ["ajv@8.17.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ajv/-/ajv-8.17.1.tgz", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + + "ajv-formats": ["ajv-formats@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ajv-formats/-/ajv-formats-2.1.1.tgz", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], + + "ajv-keywords": ["ajv-keywords@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ajv-keywords/-/ajv-keywords-5.1.0.tgz", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + + "ansi-colors": ["ansi-colors@4.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-colors/-/ansi-colors-4.1.3.tgz", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], + + "ansi-escapes": ["ansi-escapes@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-escapes/-/ansi-escapes-7.2.0.tgz", { "dependencies": { "environment": "^1.0.0" } }, "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw=="], + + "ansi-regex": ["ansi-regex@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@6.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-6.2.3.tgz", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "ansis": ["ansis@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansis/-/ansis-4.2.0.tgz", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="], + + "antlr4": ["antlr4@4.9.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/antlr4/-/antlr4-4.9.3.tgz", {}, "sha512-qNy2odgsa0skmNMCuxzXhM4M8J1YDaPv3TI+vCdnOAanu0N982wBrSqziDKRDctEZLZy9VffqIZXc0UGjjSP/g=="], + + "anymatch": ["anymatch@3.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/anymatch/-/anymatch-3.1.3.tgz", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "apache-md5": ["apache-md5@1.1.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/apache-md5/-/apache-md5-1.1.8.tgz", {}, "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA=="], + + "arch": ["arch@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/arch/-/arch-3.0.0.tgz", {}, "sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q=="], + + "arg": ["arg@4.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/arg/-/arg-4.1.3.tgz", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], + + "argparse": ["argparse@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/argparse/-/argparse-2.0.1.tgz", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + + "array-flatten": ["array-flatten@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/array-flatten/-/array-flatten-1.1.1.tgz", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], + + "array-includes": ["array-includes@3.1.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/array-includes/-/array-includes-3.1.9.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="], + + "array-union": ["array-union@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/array-union/-/array-union-2.1.0.tgz", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + + "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="], + + "array.prototype.flat": ["array.prototype.flat@1.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], + + "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], + + "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + + "asn1": ["asn1@0.2.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/asn1/-/asn1-0.2.6.tgz", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], + + "assert-plus": ["assert-plus@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/assert-plus/-/assert-plus-1.0.0.tgz", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], + + "assertion-error": ["assertion-error@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/assertion-error/-/assertion-error-2.0.1.tgz", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "ast-kit": ["ast-kit@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ast-kit/-/ast-kit-2.2.0.tgz", { "dependencies": { "@babel/parser": "^7.28.5", "pathe": "^2.0.3" } }, "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw=="], + + "ast-types": ["ast-types@0.13.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ast-types/-/ast-types-0.13.4.tgz", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], + + "ast-v8-to-istanbul": ["ast-v8-to-istanbul@0.3.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^9.0.1" } }, "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ=="], + + "async": ["async@3.2.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/async/-/async-3.2.6.tgz", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "async-function": ["async-function@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/async-function/-/async-function-1.0.0.tgz", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + + "asynckit": ["asynckit@0.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/asynckit/-/asynckit-0.4.0.tgz", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "atomic-sleep": ["atomic-sleep@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/atomic-sleep/-/atomic-sleep-1.0.0.tgz", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], + + "auto-bind": ["auto-bind@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/auto-bind/-/auto-bind-5.0.1.tgz", {}, "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg=="], + + "autoprefixer": ["autoprefixer@10.4.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/autoprefixer/-/autoprefixer-10.4.21.tgz", { "dependencies": { "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" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "aws-sign2": ["aws-sign2@0.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/aws-sign2/-/aws-sign2-0.7.0.tgz", {}, "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="], + + "aws4": ["aws4@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/aws4/-/aws4-1.13.2.tgz", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], + + "axios": ["axios@1.13.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/axios/-/axios-1.13.2.tgz", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA=="], + + "b4a": ["b4a@1.7.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/b4a/-/b4a-1.7.3.tgz", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q=="], + + "babel-jest": ["babel-jest@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-jest/-/babel-jest-30.2.0.tgz", { "dependencies": { "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.1", "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw=="], + + "babel-plugin-const-enum": ["babel-plugin-const-enum@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-const-enum/-/babel-plugin-const-enum-1.2.0.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.3.3", "@babel/traverse": "^7.16.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg=="], + + "babel-plugin-istanbul": ["babel-plugin-istanbul@7.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" } }, "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA=="], + + "babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", { "dependencies": { "@types/babel__core": "^7.20.5" } }, "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA=="], + + "babel-plugin-macros": ["babel-plugin-macros@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", { "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg=="], + + "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.14", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", { "dependencies": { "@babel/compat-data": "^7.27.7", "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg=="], + + "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.13.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A=="], + + "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg=="], + + "babel-plugin-transform-typescript-metadata": ["babel-plugin-transform-typescript-metadata@0.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0" } }, "sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg=="], + + "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", { "dependencies": { "@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" }, "peerDependencies": { "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg=="], + + "babel-preset-jest": ["babel-preset-jest@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", { "dependencies": { "babel-plugin-jest-hoist": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ=="], + + "balanced-match": ["balanced-match@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/balanced-match/-/balanced-match-1.0.2.tgz", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "bare-events": ["bare-events@2.8.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bare-events/-/bare-events-2.8.1.tgz", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ=="], + + "bare-fs": ["bare-fs@4.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bare-fs/-/bare-fs-4.5.1.tgz", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg=="], + + "bare-os": ["bare-os@3.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bare-os/-/bare-os-3.6.2.tgz", {}, "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A=="], + + "bare-path": ["bare-path@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bare-path/-/bare-path-3.0.0.tgz", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], + + "bare-stream": ["bare-stream@2.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bare-stream/-/bare-stream-2.7.0.tgz", { "dependencies": { "streamx": "^2.21.0" }, "peerDependencies": { "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-buffer", "bare-events"] }, "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A=="], + + "bare-url": ["bare-url@2.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bare-url/-/bare-url-2.3.2.tgz", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw=="], + + "base64-js": ["base64-js@1.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/base64-js/-/base64-js-1.5.1.tgz", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.31", "https://jfrog.booking.com:443/artifactory/api/npm/npm/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw=="], + + "basic-auth": ["basic-auth@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/basic-auth/-/basic-auth-2.0.1.tgz", { "dependencies": { "safe-buffer": "5.1.2" } }, "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="], + + "basic-ftp": ["basic-ftp@5.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/basic-ftp/-/basic-ftp-5.0.5.tgz", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], + + "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], + + "bcryptjs": ["bcryptjs@2.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bcryptjs/-/bcryptjs-2.4.3.tgz", {}, "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="], + + "better-sqlite3": ["better-sqlite3@11.10.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/better-sqlite3/-/better-sqlite3-11.10.0.tgz", { "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" } }, "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ=="], + + "big.js": ["big.js@5.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/big.js/-/big.js-5.2.2.tgz", {}, "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="], + + "bin-version": ["bin-version@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bin-version/-/bin-version-6.0.0.tgz", { "dependencies": { "execa": "^5.0.0", "find-versions": "^5.0.0" } }, "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw=="], + + "bin-version-check": ["bin-version-check@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bin-version-check/-/bin-version-check-5.1.0.tgz", { "dependencies": { "bin-version": "^6.0.0", "semver": "^7.5.3", "semver-truncate": "^3.0.0" } }, "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g=="], + + "bindings": ["bindings@1.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bindings/-/bindings-1.5.0.tgz", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + + "birpc": ["birpc@2.8.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/birpc/-/birpc-2.8.0.tgz", {}, "sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw=="], + + "bl": ["bl@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bl/-/bl-4.1.0.tgz", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + + "body-parser": ["body-parser@1.20.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/body-parser/-/body-parser-1.20.3.tgz", { "dependencies": { "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" } }, "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g=="], + + "boolbase": ["boolbase@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/boolbase/-/boolbase-1.0.0.tgz", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "brace-expansion": ["brace-expansion@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-2.0.2.tgz", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "braces": ["braces@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/braces/-/braces-3.0.3.tgz", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserify-zlib": ["browserify-zlib@0.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/browserify-zlib/-/browserify-zlib-0.1.4.tgz", { "dependencies": { "pako": "~0.2.0" } }, "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ=="], + + "browserslist": ["browserslist@4.27.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/browserslist/-/browserslist-4.27.0.tgz", { "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", "electron-to-chromium": "^1.5.238", "node-releases": "^2.0.26", "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw=="], + + "bs-logger": ["bs-logger@0.2.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bs-logger/-/bs-logger-0.2.6.tgz", { "dependencies": { "fast-json-stable-stringify": "2.x" } }, "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog=="], + + "bser": ["bser@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bser/-/bser-2.1.1.tgz", { "dependencies": { "node-int64": "^0.4.0" } }, "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="], + + "buffer": ["buffer@6.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/buffer/-/buffer-6.0.3.tgz", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "buffer-crc32": ["buffer-crc32@0.2.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/buffer-crc32/-/buffer-crc32-0.2.13.tgz", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + + "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], + + "buffer-from": ["buffer-from@1.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/buffer-from/-/buffer-from-1.1.2.tgz", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "bundle-name": ["bundle-name@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bundle-name/-/bundle-name-4.1.0.tgz", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], + + "bytes": ["bytes@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/bytes/-/bytes-3.1.2.tgz", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "cac": ["cac@6.7.14", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cac/-/cac-6.7.14.tgz", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + + "cacheable-lookup": ["cacheable-lookup@7.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", {}, "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="], + + "cacheable-request": ["cacheable-request@10.2.14", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cacheable-request/-/cacheable-request-10.2.14.tgz", { "dependencies": { "@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" } }, "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ=="], + + "call-bind": ["call-bind@1.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/call-bind/-/call-bind-1.0.8.tgz", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/call-bound/-/call-bound-1.0.4.tgz", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "callsites": ["callsites@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/callsites/-/callsites-3.1.0.tgz", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "camelcase": ["camelcase@6.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/camelcase/-/camelcase-6.3.0.tgz", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + + "caniuse-api": ["caniuse-api@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/caniuse-api/-/caniuse-api-3.0.0.tgz", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001756", "https://jfrog.booking.com:443/artifactory/api/npm/npm/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", {}, "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A=="], + + "caseless": ["caseless@0.12.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/caseless/-/caseless-0.12.0.tgz", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="], + + "chai": ["chai@5.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chai/-/chai-5.3.3.tgz", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], + + "chalk": ["chalk@5.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-5.6.2.tgz", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "char-regex": ["char-regex@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/char-regex/-/char-regex-1.0.2.tgz", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], + + "chardet": ["chardet@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chardet/-/chardet-2.1.1.tgz", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="], + + "check-error": ["check-error@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/check-error/-/check-error-2.1.1.tgz", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], + + "chokidar": ["chokidar@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chokidar/-/chokidar-4.0.3.tgz", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "chownr": ["chownr@1.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chownr/-/chownr-1.1.4.tgz", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], + + "chrome-trace-event": ["chrome-trace-event@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], + + "chromium-bidi": ["chromium-bidi@11.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chromium-bidi/-/chromium-bidi-11.0.0.tgz", { "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-cM3DI+OOb89T3wO8cpPSro80Q9eKYJ7hGVXoGS3GkDPxnYSqiv+6xwpIf6XERyJ9Tdsl09hmNmY94BkgZdVekw=="], + + "ci-info": ["ci-info@4.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ci-info/-/ci-info-4.3.1.tgz", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], + + "cjs-module-lexer": ["cjs-module-lexer@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", {}, "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA=="], + + "cli-boxes": ["cli-boxes@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cli-boxes/-/cli-boxes-3.0.0.tgz", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], + + "cli-cursor": ["cli-cursor@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + + "cli-spinners": ["cli-spinners@2.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cli-spinners/-/cli-spinners-2.6.1.tgz", {}, "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="], + + "cli-truncate": ["cli-truncate@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cli-truncate/-/cli-truncate-4.0.0.tgz", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" } }, "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA=="], + + "cli-width": ["cli-width@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cli-width/-/cli-width-4.1.0.tgz", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], + + "clipanion": ["clipanion@4.0.0-rc.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/clipanion/-/clipanion-4.0.0-rc.4.tgz", { "dependencies": { "typanion": "^3.8.0" } }, "sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q=="], + + "cliui": ["cliui@8.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cliui/-/cliui-8.0.1.tgz", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "clone": ["clone@2.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/clone/-/clone-2.1.2.tgz", {}, "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="], + + "co": ["co@4.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/co/-/co-4.6.0.tgz", {}, "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ=="], + + "code-block-writer": ["code-block-writer@13.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/code-block-writer/-/code-block-writer-13.0.3.tgz", {}, "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="], + + "code-excerpt": ["code-excerpt@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/code-excerpt/-/code-excerpt-4.0.0.tgz", { "dependencies": { "convert-to-spaces": "^2.0.1" } }, "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA=="], + + "collect-v8-coverage": ["collect-v8-coverage@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", {}, "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw=="], + + "color-convert": ["color-convert@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/color-name/-/color-name-1.1.4.tgz", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "colord": ["colord@2.9.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/colord/-/colord-2.9.3.tgz", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], + + "colorette": ["colorette@2.0.20", "https://jfrog.booking.com:443/artifactory/api/npm/npm/colorette/-/colorette-2.0.20.tgz", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + + "columnify": ["columnify@1.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/columnify/-/columnify-1.6.0.tgz", { "dependencies": { "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" } }, "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q=="], + + "combined-stream": ["combined-stream@1.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/combined-stream/-/combined-stream-1.0.8.tgz", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "commander": ["commander@12.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/commander/-/commander-12.1.0.tgz", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "commondir": ["commondir@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/commondir/-/commondir-1.0.1.tgz", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], + + "compressible": ["compressible@2.0.18", "https://jfrog.booking.com:443/artifactory/api/npm/npm/compressible/-/compressible-2.0.18.tgz", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="], + + "compression": ["compression@1.8.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/compression/-/compression-1.8.0.tgz", { "dependencies": { "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" } }, "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA=="], + + "concat-map": ["concat-map@0.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/concat-map/-/concat-map-0.0.1.tgz", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "concat-with-sourcemaps": ["concat-with-sourcemaps@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", { "dependencies": { "source-map": "^0.6.1" } }, "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg=="], + + "confusing-browser-globals": ["confusing-browser-globals@1.0.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", {}, "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA=="], + + "content-disposition": ["content-disposition@0.5.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/content-disposition/-/content-disposition-0.5.4.tgz", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], + + "content-type": ["content-type@1.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/content-type/-/content-type-1.0.5.tgz", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + + "convert-source-map": ["convert-source-map@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/convert-source-map/-/convert-source-map-2.0.0.tgz", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "convert-to-spaces": ["convert-to-spaces@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", {}, "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ=="], + + "cookie": ["cookie@0.7.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cookie/-/cookie-0.7.1.tgz", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], + + "cookie-signature": ["cookie-signature@1.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cookie-signature/-/cookie-signature-1.0.6.tgz", {}, "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="], + + "core-js": ["core-js@3.40.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/core-js/-/core-js-3.40.0.tgz", {}, "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ=="], + + "core-js-compat": ["core-js-compat@3.46.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/core-js-compat/-/core-js-compat-3.46.0.tgz", { "dependencies": { "browserslist": "^4.26.3" } }, "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law=="], + + "core-util-is": ["core-util-is@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/core-util-is/-/core-util-is-1.0.2.tgz", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], + + "cors": ["cors@2.8.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cors/-/cors-2.8.5.tgz", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], + + "corser": ["corser@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/corser/-/corser-2.0.1.tgz", {}, "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ=="], + + "cosmiconfig": ["cosmiconfig@9.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cosmiconfig/-/cosmiconfig-9.0.0.tgz", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="], + + "create-require": ["create-require@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/create-require/-/create-require-1.1.1.tgz", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], + + "cross-spawn": ["cross-spawn@7.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cross-spawn/-/cross-spawn-7.0.6.tgz", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "css-declaration-sorter": ["css-declaration-sorter@6.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g=="], + + "css-select": ["css-select@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/css-select/-/css-select-4.3.0.tgz", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="], + + "css-tree": ["css-tree@1.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/css-tree/-/css-tree-1.1.3.tgz", { "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="], + + "css-what": ["css-what@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/css-what/-/css-what-6.2.2.tgz", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + + "cssesc": ["cssesc@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cssesc/-/cssesc-3.0.0.tgz", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "cssnano": ["cssnano@5.1.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cssnano/-/cssnano-5.1.15.tgz", { "dependencies": { "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw=="], + + "cssnano-preset-default": ["cssnano-preset-default@5.2.14", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", { "dependencies": { "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" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A=="], + + "cssnano-utils": ["cssnano-utils@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cssnano-utils/-/cssnano-utils-3.1.0.tgz", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA=="], + + "csso": ["csso@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/csso/-/csso-4.2.0.tgz", { "dependencies": { "css-tree": "^1.1.2" } }, "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="], + + "cssstyle": ["cssstyle@4.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cssstyle/-/cssstyle-4.6.0.tgz", { "dependencies": { "@asamuzakjp/css-color": "^3.2.0", "rrweb-cssom": "^0.8.0" } }, "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg=="], + + "csstype": ["csstype@3.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/csstype/-/csstype-3.2.1.tgz", {}, "sha512-98XGutrXoh75MlgLihlNxAGbUuFQc7l1cqcnEZlLNKc0UrVdPndgmaDmYTDDh929VS/eqTZV0rozmhu2qqT1/g=="], + + "dashdash": ["dashdash@1.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dashdash/-/dashdash-1.14.1.tgz", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], + + "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="], + + "data-urls": ["data-urls@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/data-urls/-/data-urls-5.0.0.tgz", { "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" } }, "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg=="], + + "data-view-buffer": ["data-view-buffer@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/data-view-buffer/-/data-view-buffer-1.0.2.tgz", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], + + "data-view-byte-length": ["data-view-byte-length@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], + + "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], + + "dateformat": ["dateformat@4.6.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dateformat/-/dateformat-4.6.3.tgz", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], + + "dayjs": ["dayjs@1.11.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dayjs/-/dayjs-1.11.13.tgz", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], + + "debug": ["debug@4.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.3.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "decimal.js": ["decimal.js@10.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/decimal.js/-/decimal.js-10.6.0.tgz", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], + + "decompress-response": ["decompress-response@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/decompress-response/-/decompress-response-6.0.0.tgz", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + + "dedent": ["dedent@1.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dedent/-/dedent-1.7.0.tgz", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ=="], + + "deep-eql": ["deep-eql@5.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/deep-eql/-/deep-eql-5.0.2.tgz", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], + + "deep-extend": ["deep-extend@0.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/deep-extend/-/deep-extend-0.6.0.tgz", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + + "deep-is": ["deep-is@0.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/deep-is/-/deep-is-0.1.4.tgz", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "deepmerge": ["deepmerge@4.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/deepmerge/-/deepmerge-4.3.1.tgz", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "default-browser": ["default-browser@5.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/default-browser/-/default-browser-5.3.0.tgz", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-Qq68+VkJlc8tjnPV1i7HtbIn7ohmjZa88qUvHMIK0ZKUXMCuV45cT7cEXALPUmeXCe0q1DWQkQTemHVaLIFSrg=="], + + "default-browser-id": ["default-browser-id@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/default-browser-id/-/default-browser-id-5.0.0.tgz", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], + + "defaults": ["defaults@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/defaults/-/defaults-1.0.4.tgz", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], + + "defer-to-connect": ["defer-to-connect@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/defer-to-connect/-/defer-to-connect-2.0.1.tgz", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], + + "define-data-property": ["define-data-property@1.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/define-data-property/-/define-data-property-1.1.4.tgz", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-lazy-prop": ["define-lazy-prop@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + + "define-properties": ["define-properties@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/define-properties/-/define-properties-1.2.1.tgz", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "degenerator": ["degenerator@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/degenerator/-/degenerator-5.0.1.tgz", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], + + "delayed-stream": ["delayed-stream@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/delayed-stream/-/delayed-stream-1.0.0.tgz", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "depd": ["depd@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/depd/-/depd-2.0.0.tgz", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "destroy": ["destroy@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/destroy/-/destroy-1.2.0.tgz", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], + + "detect-libc": ["detect-libc@2.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/detect-libc/-/detect-libc-2.1.2.tgz", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "detect-newline": ["detect-newline@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/detect-newline/-/detect-newline-3.1.0.tgz", {}, "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="], + + "detect-port": ["detect-port@1.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/detect-port/-/detect-port-1.6.1.tgz", { "dependencies": { "address": "^1.0.1", "debug": "4" }, "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" } }, "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q=="], + + "devtools-protocol": ["devtools-protocol@0.0.1521046", "https://jfrog.booking.com:443/artifactory/api/npm/npm/devtools-protocol/-/devtools-protocol-0.0.1521046.tgz", {}, "sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w=="], + + "diff": ["diff@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/diff/-/diff-4.0.2.tgz", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], + + "dir-glob": ["dir-glob@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dir-glob/-/dir-glob-3.0.1.tgz", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + + "doctrine": ["doctrine@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/doctrine/-/doctrine-2.1.0.tgz", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], + + "dom-serializer": ["dom-serializer@1.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dom-serializer/-/dom-serializer-1.4.1.tgz", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], + + "domelementtype": ["domelementtype@2.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/domelementtype/-/domelementtype-2.3.0.tgz", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@4.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/domhandler/-/domhandler-4.3.1.tgz", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + + "domutils": ["domutils@2.8.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/domutils/-/domutils-2.8.0.tgz", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + + "dotenv": ["dotenv@16.4.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dotenv/-/dotenv-16.4.7.tgz", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], + + "dotenv-expand": ["dotenv-expand@11.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dotenv-expand/-/dotenv-expand-11.0.7.tgz", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], + + "dset": ["dset@3.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dset/-/dset-3.1.4.tgz", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], + + "dts-resolver": ["dts-resolver@2.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dts-resolver/-/dts-resolver-2.1.3.tgz", { "peerDependencies": { "oxc-resolver": ">=11.0.0" }, "optionalPeers": ["oxc-resolver"] }, "sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw=="], + + "dunder-proto": ["dunder-proto@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/dunder-proto/-/dunder-proto-1.0.1.tgz", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "duplexify": ["duplexify@3.7.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/duplexify/-/duplexify-3.7.1.tgz", { "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eastasianwidth/-/eastasianwidth-0.2.0.tgz", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "ecc-jsbn": ["ecc-jsbn@0.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", { "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw=="], + + "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + + "ee-first": ["ee-first@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ee-first/-/ee-first-1.1.1.tgz", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "ejs": ["ejs@3.1.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ejs/-/ejs-3.1.10.tgz", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.260", "https://jfrog.booking.com:443/artifactory/api/npm/npm/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", {}, "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA=="], + + "emittery": ["emittery@0.13.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emittery/-/emittery-0.13.1.tgz", {}, "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ=="], + + "emoji-regex": ["emoji-regex@8.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "emojis-list": ["emojis-list@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emojis-list/-/emojis-list-3.0.0.tgz", {}, "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="], + + "empathic": ["empathic@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/empathic/-/empathic-2.0.0.tgz", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], + + "encodeurl": ["encodeurl@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/encodeurl/-/encodeurl-2.0.0.tgz", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "end-of-stream": ["end-of-stream@1.4.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/end-of-stream/-/end-of-stream-1.4.5.tgz", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "enhanced-resolve": ["enhanced-resolve@5.18.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="], + + "enquirer": ["enquirer@2.3.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/enquirer/-/enquirer-2.3.6.tgz", { "dependencies": { "ansi-colors": "^4.1.1" } }, "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="], + + "entities": ["entities@6.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/entities/-/entities-6.0.1.tgz", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "env-paths": ["env-paths@2.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/env-paths/-/env-paths-2.2.1.tgz", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + + "envinfo": ["envinfo@7.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/envinfo/-/envinfo-7.14.0.tgz", { "bin": { "envinfo": "dist/cli.js" } }, "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg=="], + + "environment": ["environment@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/environment/-/environment-1.1.0.tgz", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], + + "error-ex": ["error-ex@1.3.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/error-ex/-/error-ex-1.3.4.tgz", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], + + "es-abstract": ["es-abstract@1.24.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-abstract/-/es-abstract-1.24.0.tgz", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg=="], + + "es-define-property": ["es-define-property@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-define-property/-/es-define-property-1.0.1.tgz", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-errors/-/es-errors-1.3.0.tgz", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-module-lexer": ["es-module-lexer@1.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-module-lexer/-/es-module-lexer-1.7.0.tgz", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-object-atoms/-/es-object-atoms-1.1.1.tgz", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], + + "es-to-primitive": ["es-to-primitive@1.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-to-primitive/-/es-to-primitive-1.3.0.tgz", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + + "es-toolkit": ["es-toolkit@1.42.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/es-toolkit/-/es-toolkit-1.42.0.tgz", {}, "sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA=="], + + "esbuild": ["esbuild@0.25.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/esbuild/-/esbuild-0.25.12.tgz", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "escalade": ["escalade@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/escalade/-/escalade-3.2.0.tgz", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-html": ["escape-html@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/escape-html/-/escape-html-1.0.3.tgz", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "escodegen": ["escodegen@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/escodegen/-/escodegen-2.1.0.tgz", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], + + "eslint": ["eslint@9.39.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint/-/eslint-9.39.1.tgz", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.1", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g=="], + + "eslint-config-prettier": ["eslint-config-prettier@10.1.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw=="], + + "eslint-import-context": ["eslint-import-context@0.1.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-import-context/-/eslint-import-context-0.1.9.tgz", { "dependencies": { "get-tsconfig": "^4.10.1", "stable-hash-x": "^0.2.0" }, "peerDependencies": { "unrs-resolver": "^1.0.0" }, "optionalPeers": ["unrs-resolver"] }, "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg=="], + + "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], + + "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@4.4.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz", { "dependencies": { "debug": "^4.4.1", "eslint-import-context": "^0.1.8", "get-tsconfig": "^4.10.1", "is-bun-module": "^2.0.0", "stable-hash-x": "^0.2.0", "tinyglobby": "^0.2.14", "unrs-resolver": "^1.7.11" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import", "eslint-plugin-import-x"] }, "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw=="], + + "eslint-module-utils": ["eslint-module-utils@2.12.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], + + "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], + + "eslint-plugin-unused-imports": ["eslint-plugin-unused-imports@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.3.0.tgz", { "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "eslint": "^9.0.0 || ^8.0.0" }, "optionalPeers": ["@typescript-eslint/eslint-plugin"] }, "sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA=="], + + "eslint-scope": ["eslint-scope@8.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-scope/-/eslint-scope-8.4.0.tgz", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "espree": ["espree@10.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/espree/-/espree-10.4.0.tgz", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + + "esprima": ["esprima@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/esprima/-/esprima-4.0.1.tgz", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + + "esquery": ["esquery@1.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/esquery/-/esquery-1.6.0.tgz", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], + + "esrecurse": ["esrecurse@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/esrecurse/-/esrecurse-4.3.0.tgz", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/estraverse/-/estraverse-5.3.0.tgz", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-walker": ["estree-walker@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/estree-walker/-/estree-walker-2.0.2.tgz", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "esutils": ["esutils@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/esutils/-/esutils-2.0.3.tgz", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "etag": ["etag@1.8.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/etag/-/etag-1.8.1.tgz", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "event-target-shim": ["event-target-shim@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/event-target-shim/-/event-target-shim-5.0.1.tgz", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + + "eventemitter3": ["eventemitter3@4.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eventemitter3/-/eventemitter3-4.0.7.tgz", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], + + "events": ["events@3.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/events/-/events-3.3.0.tgz", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "events-universal": ["events-universal@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/events-universal/-/events-universal-1.0.1.tgz", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="], + + "execa": ["execa@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/execa/-/execa-5.1.1.tgz", { "dependencies": { "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" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], + + "exit-x": ["exit-x@0.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/exit-x/-/exit-x-0.2.2.tgz", {}, "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ=="], + + "expand-template": ["expand-template@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/expand-template/-/expand-template-2.0.3.tgz", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], + + "expect": ["expect@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/expect/-/expect-30.2.0.tgz", { "dependencies": { "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-util": "30.2.0" } }, "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw=="], + + "expect-type": ["expect-type@1.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/expect-type/-/expect-type-1.2.2.tgz", {}, "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA=="], + + "express": ["express@4.21.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/express/-/express-4.21.2.tgz", { "dependencies": { "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.12", "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" } }, "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA=="], + + "express-rate-limit": ["express-rate-limit@5.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/express-rate-limit/-/express-rate-limit-5.5.1.tgz", {}, "sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg=="], + + "ext-list": ["ext-list@2.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ext-list/-/ext-list-2.2.2.tgz", { "dependencies": { "mime-db": "^1.28.0" } }, "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA=="], + + "ext-name": ["ext-name@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ext-name/-/ext-name-5.0.0.tgz", { "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" } }, "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ=="], + + "extend": ["extend@3.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/extend/-/extend-3.0.2.tgz", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "extract-zip": ["extract-zip@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/extract-zip/-/extract-zip-2.0.1.tgz", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + + "extsprintf": ["extsprintf@1.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/extsprintf/-/extsprintf-1.4.1.tgz", {}, "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA=="], + + "fast-copy": ["fast-copy@3.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-copy/-/fast-copy-3.0.2.tgz", {}, "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-fifo": ["fast-fifo@1.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-fifo/-/fast-fifo-1.3.2.tgz", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], + + "fast-glob": ["fast-glob@3.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-glob/-/fast-glob-3.3.3.tgz", { "dependencies": { "@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" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fast-redact": ["fast-redact@3.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-redact/-/fast-redact-3.5.0.tgz", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], + + "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], + + "fast-uri": ["fast-uri@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-uri/-/fast-uri-3.1.0.tgz", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + + "fast-xml-parser": ["fast-xml-parser@5.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-xml-parser/-/fast-xml-parser-5.3.1.tgz", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-jbNkWiv2Ec1A7wuuxk0br0d0aTMUtQ4IkL+l/i1r9PRf6pLXjDgsBsWwO+UyczmQlnehi4Tbc8/KIvxGQe+I/A=="], + + "fastq": ["fastq@1.19.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fastq/-/fastq-1.19.1.tgz", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "fb-watchman": ["fb-watchman@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fb-watchman/-/fb-watchman-2.0.2.tgz", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="], + + "fd-package-json": ["fd-package-json@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fd-package-json/-/fd-package-json-2.0.0.tgz", { "dependencies": { "walk-up-path": "^4.0.0" } }, "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ=="], + + "fd-slicer": ["fd-slicer@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fd-slicer/-/fd-slicer-1.1.0.tgz", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], + + "fdir": ["fdir@6.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fdir/-/fdir-6.5.0.tgz", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fflate": ["fflate@0.8.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fflate/-/fflate-0.8.2.tgz", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], + + "figures": ["figures@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/figures/-/figures-3.2.0.tgz", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/file-entry-cache/-/file-entry-cache-8.0.0.tgz", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "file-type": ["file-type@20.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/file-type/-/file-type-20.5.0.tgz", { "dependencies": { "@tokenizer/inflate": "^0.2.6", "strtok3": "^10.2.0", "token-types": "^6.0.0", "uint8array-extras": "^1.4.0" } }, "sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg=="], + + "file-uri-to-path": ["file-uri-to-path@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], + + "filelist": ["filelist@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/filelist/-/filelist-1.0.4.tgz", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="], + + "filename-reserved-regex": ["filename-reserved-regex@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", {}, "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw=="], + + "filenamify": ["filenamify@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/filenamify/-/filenamify-6.0.0.tgz", { "dependencies": { "filename-reserved-regex": "^3.0.0" } }, "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ=="], + + "fill-range": ["fill-range@7.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fill-range/-/fill-range-7.1.1.tgz", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "finalhandler": ["finalhandler@1.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/finalhandler/-/finalhandler-1.3.1.tgz", { "dependencies": { "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" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], + + "find-cache-dir": ["find-cache-dir@3.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/find-cache-dir/-/find-cache-dir-3.3.2.tgz", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="], + + "find-up": ["find-up@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/find-up/-/find-up-5.0.0.tgz", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "find-versions": ["find-versions@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/find-versions/-/find-versions-5.1.0.tgz", { "dependencies": { "semver-regex": "^4.0.5" } }, "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg=="], + + "flat": ["flat@5.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/flat/-/flat-5.0.2.tgz", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], + + "flat-cache": ["flat-cache@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/flat-cache/-/flat-cache-4.0.1.tgz", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/flatted/-/flatted-3.3.3.tgz", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "follow-redirects": ["follow-redirects@1.15.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/follow-redirects/-/follow-redirects-1.15.11.tgz", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "for-each": ["for-each@0.3.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/for-each/-/for-each-0.3.5.tgz", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "foreground-child": ["foreground-child@3.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/foreground-child/-/foreground-child-3.3.1.tgz", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "forever-agent": ["forever-agent@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/forever-agent/-/forever-agent-0.6.1.tgz", {}, "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="], + + "form-data": ["form-data@4.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/form-data/-/form-data-4.0.4.tgz", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow=="], + + "form-data-encoder": ["form-data-encoder@2.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/form-data-encoder/-/form-data-encoder-2.1.4.tgz", {}, "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw=="], + + "formatly": ["formatly@0.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/formatly/-/formatly-0.3.0.tgz", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="], + + "forwarded": ["forwarded@0.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/forwarded/-/forwarded-0.2.0.tgz", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + + "fraction.js": ["fraction.js@4.3.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fraction.js/-/fraction.js-4.3.7.tgz", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], + + "fresh": ["fresh@0.5.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fresh/-/fresh-0.5.2.tgz", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], + + "front-matter": ["front-matter@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/front-matter/-/front-matter-4.0.2.tgz", { "dependencies": { "js-yaml": "^3.13.1" } }, "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg=="], + + "fs-constants": ["fs-constants@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fs-constants/-/fs-constants-1.0.0.tgz", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], + + "fs-extra": ["fs-extra@8.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fs-extra/-/fs-extra-8.1.0.tgz", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "fs.realpath": ["fs.realpath@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fsevents/-/fsevents-2.3.3.tgz", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/function-bind/-/function-bind-1.1.2.tgz", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "function.prototype.name": ["function.prototype.name@1.1.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/function.prototype.name/-/function.prototype.name-1.1.8.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + + "functions-have-names": ["functions-have-names@1.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/functions-have-names/-/functions-have-names-1.2.3.tgz", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "fxmlp": ["fxmlp@1.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fxmlp/-/fxmlp-1.0.7.tgz", {}, "sha512-Fqjs6oVzfAabr966QFDah8YLvdv4jAUwlCxQG+4IKnNgra2e/UgosCI929pm39p35P2chI6ZUaQNHCOgd5EFcQ=="], + + "generator-function": ["generator-function@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/generator-function/-/generator-function-2.0.1.tgz", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], + + "generic-names": ["generic-names@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/generic-names/-/generic-names-4.0.0.tgz", { "dependencies": { "loader-utils": "^3.2.0" } }, "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A=="], + + "generic-pool": ["generic-pool@3.9.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/generic-pool/-/generic-pool-3.9.0.tgz", {}, "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="], + + "gensync": ["gensync@1.0.0-beta.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/gensync/-/gensync-1.0.0-beta.2.tgz", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-caller-file": ["get-caller-file@2.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-east-asian-width": ["get-east-asian-width@1.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-intrinsic/-/get-intrinsic-1.3.0.tgz", { "dependencies": { "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" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-package-type": ["get-package-type@0.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-package-type/-/get-package-type-0.1.0.tgz", {}, "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="], + + "get-proto": ["get-proto@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-proto/-/get-proto-1.0.1.tgz", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-stream": ["get-stream@6.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-stream/-/get-stream-6.0.1.tgz", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + + "get-symbol-description": ["get-symbol-description@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-symbol-description/-/get-symbol-description-1.1.0.tgz", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], + + "get-them-args": ["get-them-args@1.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-them-args/-/get-them-args-1.3.2.tgz", {}, "sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw=="], + + "get-tsconfig": ["get-tsconfig@4.13.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-tsconfig/-/get-tsconfig-4.13.0.tgz", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="], + + "get-uri": ["get-uri@6.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-uri/-/get-uri-6.0.5.tgz", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="], + + "getpass": ["getpass@0.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/getpass/-/getpass-0.1.7.tgz", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng=="], + + "github-from-package": ["github-from-package@0.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/github-from-package/-/github-from-package-0.0.0.tgz", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], + + "glob": ["glob@10.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/glob/-/glob-10.5.0.tgz", { "dependencies": { "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" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], + + "glob-parent": ["glob-parent@6.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/glob-parent/-/glob-parent-6.0.2.tgz", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "glob-to-regexp": ["glob-to-regexp@0.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], + + "globals": ["globals@15.15.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/globals/-/globals-15.15.0.tgz", {}, "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="], + + "globalthis": ["globalthis@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/globalthis/-/globalthis-1.0.4.tgz", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + + "globby": ["globby@10.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/globby/-/globby-10.0.1.tgz", { "dependencies": { "@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" } }, "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A=="], + + "gopd": ["gopd@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/gopd/-/gopd-1.2.0.tgz", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "got": ["got@13.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/got/-/got-13.0.0.tgz", { "dependencies": { "@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" } }, "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA=="], + + "graceful-fs": ["graceful-fs@4.2.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/graceful-fs/-/graceful-fs-4.2.11.tgz", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "graphemer": ["graphemer@1.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/graphemer/-/graphemer-1.4.0.tgz", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + + "gunzip-maybe": ["gunzip-maybe@1.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", { "dependencies": { "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" }, "bin": { "gunzip-maybe": "bin.js" } }, "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw=="], + + "handlebars": ["handlebars@4.7.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/handlebars/-/handlebars-4.7.8.tgz", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="], + + "harmony-reflect": ["harmony-reflect@1.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/harmony-reflect/-/harmony-reflect-1.6.2.tgz", {}, "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g=="], + + "has-bigints": ["has-bigints@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/has-bigints/-/has-bigints-1.1.0.tgz", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], + + "has-flag": ["has-flag@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/has-flag/-/has-flag-4.0.0.tgz", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-proto": ["has-proto@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/has-proto/-/has-proto-1.2.0.tgz", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], + + "has-symbols": ["has-symbols@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/has-symbols/-/has-symbols-1.1.0.tgz", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/has-tostringtag/-/has-tostringtag-1.0.2.tgz", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/hasown/-/hasown-2.0.2.tgz", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hdb": ["hdb@0.19.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/hdb/-/hdb-0.19.12.tgz", { "dependencies": { "iconv-lite": "^0.4.18" } }, "sha512-vv+cjmvr6fNH/s0Q2zOZc4sEjMpSC0KuacFn8dp3L38qM3RA2LLeX70wWhZLESpwvwUf1pQkRfUhZeooFSmv3A=="], + + "he": ["he@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/he/-/he-1.2.0.tgz", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], + + "help-me": ["help-me@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/help-me/-/help-me-5.0.0.tgz", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], + + "hookable": ["hookable@5.5.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/hookable/-/hookable-5.5.3.tgz", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "hosted-git-info": ["hosted-git-info@7.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/hosted-git-info/-/hosted-git-info-7.0.2.tgz", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], + + "html-encoding-sniffer": ["html-encoding-sniffer@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", { "dependencies": { "whatwg-encoding": "^2.0.0" } }, "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA=="], + + "html-escaper": ["html-escaper@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/html-escaper/-/html-escaper-2.0.2.tgz", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], + + "http-cache-semantics": ["http-cache-semantics@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + + "http-errors": ["http-errors@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-errors/-/http-errors-2.0.0.tgz", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], + + "http-proxy": ["http-proxy@1.18.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-proxy/-/http-proxy-1.18.1.tgz", { "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ=="], + + "http-proxy-agent": ["http-proxy-agent@7.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + + "http-server": ["http-server@14.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-server/-/http-server-14.1.1.tgz", { "dependencies": { "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" }, "bin": { "http-server": "bin/http-server" } }, "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A=="], + + "http-signature": ["http-signature@1.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-signature/-/http-signature-1.4.0.tgz", { "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", "sshpk": "^1.18.0" } }, "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg=="], + + "http-status-codes": ["http-status-codes@2.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-status-codes/-/http-status-codes-2.3.0.tgz", {}, "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA=="], + + "http2-wrapper": ["http2-wrapper@2.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http2-wrapper/-/http2-wrapper-2.2.1.tgz", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" } }, "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ=="], + + "https-proxy-agent": ["https-proxy-agent@7.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "human-signals": ["human-signals@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/human-signals/-/human-signals-2.1.0.tgz", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], + + "husky": ["husky@9.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/husky/-/husky-9.1.7.tgz", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], + + "iconv-lite": ["iconv-lite@0.4.24", "https://jfrog.booking.com:443/artifactory/api/npm/npm/iconv-lite/-/iconv-lite-0.4.24.tgz", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + + "icss-replace-symbols": ["icss-replace-symbols@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", {}, "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg=="], + + "icss-utils": ["icss-utils@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/icss-utils/-/icss-utils-5.1.0.tgz", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], + + "identity-obj-proxy": ["identity-obj-proxy@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", { "dependencies": { "harmony-reflect": "^1.4.6" } }, "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA=="], + + "ieee754": ["ieee754@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ieee754/-/ieee754-1.2.1.tgz", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@5.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ignore/-/ignore-5.3.2.tgz", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-cwd": ["import-cwd@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/import-cwd/-/import-cwd-3.0.0.tgz", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], + + "import-fresh": ["import-fresh@3.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/import-fresh/-/import-fresh-3.3.1.tgz", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "import-from": ["import-from@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/import-from/-/import-from-3.0.0.tgz", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ=="], + + "import-local": ["import-local@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/import-local/-/import-local-3.2.0.tgz", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="], + + "imurmurhash": ["imurmurhash@0.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "indent-string": ["indent-string@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/indent-string/-/indent-string-5.0.0.tgz", {}, "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg=="], + + "inflight": ["inflight@1.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/inflight/-/inflight-1.0.6.tgz", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/inherits/-/inherits-2.0.4.tgz", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ini": ["ini@1.3.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ini/-/ini-1.3.8.tgz", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + + "ink": ["ink@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ink/-/ink-5.1.0.tgz", { "dependencies": { "@alcalzone/ansi-tokenize": "^0.1.3", "ansi-escapes": "^7.0.0", "ansi-styles": "^6.2.1", "auto-bind": "^5.0.1", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "cli-cursor": "^4.0.0", "cli-truncate": "^4.0.0", "code-excerpt": "^4.0.0", "es-toolkit": "^1.22.0", "indent-string": "^5.0.0", "is-in-ci": "^1.0.0", "patch-console": "^2.0.0", "react-reconciler": "^0.29.0", "scheduler": "^0.23.0", "signal-exit": "^3.0.7", "slice-ansi": "^7.1.0", "stack-utils": "^2.0.6", "string-width": "^7.2.0", "type-fest": "^4.27.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0", "ws": "^8.18.0", "yoga-wasm-web": "~0.3.3" }, "peerDependencies": { "@types/react": ">=18.0.0", "react": ">=18.0.0", "react-devtools-core": "^4.19.1" }, "optionalPeers": ["@types/react", "react-devtools-core"] }, "sha512-3vIO+CU4uSg167/dZrg4wHy75llUINYXxN4OsdaCkE40q4zyOTPwNc2VEpLnnWsIvIQeo6x6lilAhuaSt+rIsA=="], + + "ink-select-input": ["ink-select-input@6.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ink-select-input/-/ink-select-input-6.2.0.tgz", { "dependencies": { "figures": "^6.1.0", "to-rotated": "^1.0.0" }, "peerDependencies": { "ink": ">=5.0.0", "react": ">=18.0.0" } }, "sha512-304fZXxkpYxJ9si5lxRCaX01GNlmPBgOZumXXRnPYbHW/iI31cgQynqk2tRypGLOF1cMIwPUzL2LSm6q4I5rQQ=="], + + "ink-spinner": ["ink-spinner@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ink-spinner/-/ink-spinner-5.0.0.tgz", { "dependencies": { "cli-spinners": "^2.7.0" }, "peerDependencies": { "ink": ">=4.0.0", "react": ">=18.0.0" } }, "sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA=="], + + "ink-text-input": ["ink-text-input@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ink-text-input/-/ink-text-input-6.0.0.tgz", { "dependencies": { "chalk": "^5.3.0", "type-fest": "^4.18.2" }, "peerDependencies": { "ink": ">=5", "react": ">=18" } }, "sha512-Fw64n7Yha5deb1rHY137zHTAbSTNelUKuB5Kkk2HACXEtwIHBCf9OH2tP/LQ9fRYTl1F0dZgbW0zPnZk6FA9Lw=="], + + "inspect-with-kind": ["inspect-with-kind@1.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", { "dependencies": { "kind-of": "^6.0.2" } }, "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g=="], + + "internal-slot": ["internal-slot@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/internal-slot/-/internal-slot-1.1.0.tgz", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + + "ip-address": ["ip-address@10.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ip-address/-/ip-address-10.0.1.tgz", {}, "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA=="], + + "ip-regex": ["ip-regex@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ip-regex/-/ip-regex-4.3.0.tgz", {}, "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + + "is-array-buffer": ["is-array-buffer@3.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-array-buffer/-/is-array-buffer-3.0.5.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + + "is-arrayish": ["is-arrayish@0.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + + "is-async-function": ["is-async-function@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-async-function/-/is-async-function-2.1.1.tgz", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], + + "is-bigint": ["is-bigint@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-bigint/-/is-bigint-1.1.0.tgz", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + + "is-boolean-object": ["is-boolean-object@1.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-boolean-object/-/is-boolean-object-1.2.2.tgz", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + + "is-bun-module": ["is-bun-module@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-bun-module/-/is-bun-module-2.0.0.tgz", { "dependencies": { "semver": "^7.7.1" } }, "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ=="], + + "is-callable": ["is-callable@1.2.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-callable/-/is-callable-1.2.7.tgz", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-core-module": ["is-core-module@2.16.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-core-module/-/is-core-module-2.16.1.tgz", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-data-view": ["is-data-view@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-data-view/-/is-data-view-1.0.2.tgz", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], + + "is-date-object": ["is-date-object@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-date-object/-/is-date-object-1.1.0.tgz", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-deflate": ["is-deflate@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-deflate/-/is-deflate-1.0.0.tgz", {}, "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ=="], + + "is-docker": ["is-docker@2.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-docker/-/is-docker-2.2.1.tgz", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "is-extglob": ["is-extglob@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-extglob/-/is-extglob-2.1.1.tgz", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-generator-fn": ["is-generator-fn@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-generator-fn/-/is-generator-fn-2.1.0.tgz", {}, "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="], + + "is-generator-function": ["is-generator-function@1.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-generator-function/-/is-generator-function-1.1.2.tgz", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="], + + "is-glob": ["is-glob@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-glob/-/is-glob-4.0.3.tgz", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-gzip": ["is-gzip@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-gzip/-/is-gzip-1.0.0.tgz", {}, "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ=="], + + "is-in-ci": ["is-in-ci@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-in-ci/-/is-in-ci-1.0.0.tgz", { "bin": { "is-in-ci": "cli.js" } }, "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg=="], + + "is-inside-container": ["is-inside-container@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-inside-container/-/is-inside-container-1.0.0.tgz", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + + "is-interactive": ["is-interactive@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-interactive/-/is-interactive-1.0.0.tgz", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], + + "is-map": ["is-map@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-map/-/is-map-2.0.3.tgz", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + + "is-module": ["is-module@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-module/-/is-module-1.0.0.tgz", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + + "is-negative-zero": ["is-negative-zero@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-negative-zero/-/is-negative-zero-2.0.3.tgz", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], + + "is-number": ["is-number@7.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-number/-/is-number-7.0.0.tgz", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-number-object": ["is-number-object@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-number-object/-/is-number-object-1.1.1.tgz", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + + "is-plain-obj": ["is-plain-obj@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-plain-obj/-/is-plain-obj-1.1.0.tgz", {}, "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="], + + "is-plain-object": ["is-plain-object@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-plain-object/-/is-plain-object-3.0.1.tgz", {}, "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="], + + "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + + "is-promise": ["is-promise@2.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-promise/-/is-promise-2.2.2.tgz", {}, "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="], + + "is-reference": ["is-reference@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-reference/-/is-reference-1.2.1.tgz", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], + + "is-regex": ["is-regex@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-regex/-/is-regex-1.2.1.tgz", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-set": ["is-set@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-set/-/is-set-2.0.3.tgz", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + + "is-stream": ["is-stream@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-stream/-/is-stream-2.0.1.tgz", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "is-string": ["is-string@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-string/-/is-string-1.1.1.tgz", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + + "is-symbol": ["is-symbol@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-symbol/-/is-symbol-1.1.1.tgz", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + + "is-typed-array": ["is-typed-array@1.1.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-typed-array/-/is-typed-array-1.1.15.tgz", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + + "is-typedarray": ["is-typedarray@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-typedarray/-/is-typedarray-1.0.0.tgz", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], + + "is-unicode-supported": ["is-unicode-supported@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + + "is-url": ["is-url@1.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-url/-/is-url-1.2.4.tgz", {}, "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="], + + "is-weakmap": ["is-weakmap@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-weakmap/-/is-weakmap-2.0.2.tgz", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + + "is-weakref": ["is-weakref@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-weakref/-/is-weakref-1.1.1.tgz", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], + + "is-weakset": ["is-weakset@2.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-weakset/-/is-weakset-2.0.4.tgz", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + + "is-wsl": ["is-wsl@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-wsl/-/is-wsl-2.2.0.tgz", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "is2": ["is2@2.0.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is2/-/is2-2.0.9.tgz", { "dependencies": { "deep-is": "^0.1.3", "ip-regex": "^4.1.0", "is-url": "^1.2.4" } }, "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g=="], + + "isarray": ["isarray@2.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/isarray/-/isarray-2.0.5.tgz", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "isexe": ["isexe@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/isexe/-/isexe-2.0.0.tgz", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "isstream": ["isstream@0.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/isstream/-/isstream-0.1.2.tgz", {}, "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="], + + "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], + + "istanbul-lib-instrument": ["istanbul-lib-instrument@6.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", { "dependencies": { "@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" } }, "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q=="], + + "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], + + "istanbul-lib-source-maps": ["istanbul-lib-source-maps@5.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0" } }, "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A=="], + + "istanbul-reports": ["istanbul-reports@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/istanbul-reports/-/istanbul-reports-3.2.0.tgz", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], + + "jackspeak": ["jackspeak@3.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jackspeak/-/jackspeak-3.4.3.tgz", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "jake": ["jake@10.9.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jake/-/jake-10.9.4.tgz", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], + + "jest": ["jest@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest/-/jest-30.0.5.tgz", { "dependencies": { "@jest/core": "30.0.5", "@jest/types": "30.0.5", "import-local": "^3.2.0", "jest-cli": "30.0.5" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": "./bin/jest.js" }, "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ=="], + + "jest-changed-files": ["jest-changed-files@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-changed-files/-/jest-changed-files-30.0.5.tgz", { "dependencies": { "execa": "^5.1.1", "jest-util": "30.0.5", "p-limit": "^3.1.0" } }, "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A=="], + + "jest-circus": ["jest-circus@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-circus/-/jest-circus-30.2.0.tgz", { "dependencies": { "@jest/environment": "30.2.0", "@jest/expect": "30.2.0", "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", "jest-each": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-runtime": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "p-limit": "^3.1.0", "pretty-format": "30.2.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg=="], + + "jest-cli": ["jest-cli@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-cli/-/jest-cli-30.0.5.tgz", { "dependencies": { "@jest/core": "30.0.5", "@jest/test-result": "30.0.5", "@jest/types": "30.0.5", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", "jest-config": "30.0.5", "jest-util": "30.0.5", "jest-validate": "30.0.5", "yargs": "^17.7.2" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "./bin/jest.js" } }, "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw=="], + + "jest-config": ["jest-config@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-config/-/jest-config-30.2.0.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", "@jest/test-sequencer": "30.2.0", "@jest/types": "30.2.0", "babel-jest": "30.2.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-circus": "30.2.0", "jest-docblock": "30.2.0", "jest-environment-node": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-runner": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "esbuild-register", "ts-node"] }, "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA=="], + + "jest-diff": ["jest-diff@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-diff/-/jest-diff-30.2.0.tgz", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "pretty-format": "30.2.0" } }, "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A=="], + + "jest-docblock": ["jest-docblock@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-docblock/-/jest-docblock-30.2.0.tgz", { "dependencies": { "detect-newline": "^3.1.0" } }, "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA=="], + + "jest-each": ["jest-each@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-each/-/jest-each-30.2.0.tgz", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.2.0", "chalk": "^4.1.2", "jest-util": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ=="], + + "jest-environment-jsdom": ["jest-environment-jsdom@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-environment-jsdom/-/jest-environment-jsdom-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/environment-jsdom-abstract": "30.0.5", "@types/jsdom": "^21.1.7", "@types/node": "*", "jsdom": "^26.1.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-BmnDEoAH+jEjkPrvE9DTKS2r3jYSJWlN/r46h0/DBUxKrkgt2jAZ5Nj4wXLAcV1KWkRpcFqA5zri9SWzJZ1cCg=="], + + "jest-environment-node": ["jest-environment-node@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-environment-node/-/jest-environment-node-30.2.0.tgz", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0" } }, "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA=="], + + "jest-haste-map": ["jest-haste-map@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.2.0", "jest-worker": "30.2.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw=="], + + "jest-leak-detector": ["jest-leak-detector@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", { "dependencies": { "@jest/get-type": "30.1.0", "pretty-format": "30.2.0" } }, "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ=="], + + "jest-matcher-utils": ["jest-matcher-utils@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", { "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "jest-diff": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg=="], + + "jest-message-util": ["jest-message-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.2.0.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], + + "jest-mock": ["jest-mock@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "jest-util": "30.2.0" } }, "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw=="], + + "jest-pnp-resolver": ["jest-pnp-resolver@1.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", { "peerDependencies": { "jest-resolve": "*" }, "optionalPeers": ["jest-resolve"] }, "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w=="], + + "jest-regex-util": ["jest-regex-util@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-regex-util/-/jest-regex-util-30.0.1.tgz", {}, "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA=="], + + "jest-resolve": ["jest-resolve@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-resolve/-/jest-resolve-30.2.0.tgz", { "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.2.0", "jest-validate": "30.2.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" } }, "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A=="], + + "jest-resolve-dependencies": ["jest-resolve-dependencies@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", { "dependencies": { "jest-regex-util": "30.0.1", "jest-snapshot": "30.0.5" } }, "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw=="], + + "jest-runner": ["jest-runner@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-runner/-/jest-runner-30.2.0.tgz", { "dependencies": { "@jest/console": "30.2.0", "@jest/environment": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.2.0", "jest-environment-node": "30.2.0", "jest-haste-map": "30.2.0", "jest-leak-detector": "30.2.0", "jest-message-util": "30.2.0", "jest-resolve": "30.2.0", "jest-runtime": "30.2.0", "jest-util": "30.2.0", "jest-watcher": "30.2.0", "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ=="], + + "jest-runtime": ["jest-runtime@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-runtime/-/jest-runtime-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/fake-timers": "30.0.5", "@jest/globals": "30.0.5", "@jest/source-map": "30.0.1", "@jest/test-result": "30.0.5", "@jest/transform": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-regex-util": "30.0.1", "jest-resolve": "30.0.5", "jest-snapshot": "30.0.5", "jest-util": "30.0.5", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A=="], + + "jest-snapshot": ["jest-snapshot@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-snapshot/-/jest-snapshot-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", "@jest/expect-utils": "30.0.5", "@jest/get-type": "30.0.1", "@jest/snapshot-utils": "30.0.5", "@jest/transform": "30.0.5", "@jest/types": "30.0.5", "babel-preset-current-node-syntax": "^1.1.0", "chalk": "^4.1.2", "expect": "30.0.5", "graceful-fs": "^4.2.11", "jest-diff": "30.0.5", "jest-matcher-utils": "30.0.5", "jest-message-util": "30.0.5", "jest-util": "30.0.5", "pretty-format": "30.0.5", "semver": "^7.7.2", "synckit": "^0.11.8" } }, "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g=="], + + "jest-util": ["jest-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g=="], + + "jest-validate": ["jest-validate@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-validate/-/jest-validate-30.2.0.tgz", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.2.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.2.0" } }, "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw=="], + + "jest-watcher": ["jest-watcher@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-watcher/-/jest-watcher-30.0.5.tgz", { "dependencies": { "@jest/test-result": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", "jest-util": "30.0.5", "string-length": "^4.0.2" } }, "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg=="], + + "jest-worker": ["jest-worker@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.2.0.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g=="], + + "jiti": ["jiti@2.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jiti/-/jiti-2.4.2.tgz", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + + "jose": ["jose@6.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jose/-/jose-6.1.1.tgz", {}, "sha512-GWSqjfOPf4cWOkBzw5THBjtGPhXKqYnfRBzh4Ni+ArTrQQ9unvmsA3oFLqaYKoKe5sjWmGu5wVKg9Ft1i+LQfg=="], + + "joycon": ["joycon@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/joycon/-/joycon-3.1.1.tgz", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + + "js-tokens": ["js-tokens@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-tokens/-/js-tokens-4.0.0.tgz", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-yaml/-/js-yaml-4.1.1.tgz", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + + "jsbn": ["jsbn@0.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsbn/-/jsbn-0.1.1.tgz", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], + + "jsdom": ["jsdom@26.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsdom/-/jsdom-26.1.0.tgz", { "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", "decimal.js": "^10.5.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.16", "parse5": "^7.2.1", "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^5.1.1", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.1.1", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg=="], + + "jsesc": ["jsesc@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsesc/-/jsesc-3.1.0.tgz", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-buffer": ["json-buffer@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-buffer/-/json-buffer-3.0.1.tgz", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "json-schema": ["json-schema@0.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-schema/-/json-schema-0.4.0.tgz", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json-stringify-safe": ["json-stringify-safe@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], + + "json5": ["json5@2.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json5/-/json5-2.2.3.tgz", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonc-eslint-parser": ["jsonc-eslint-parser@2.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.1.tgz", { "dependencies": { "acorn": "^8.5.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", "semver": "^7.3.5" } }, "sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw=="], + + "jsonc-parser": ["jsonc-parser@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsonc-parser/-/jsonc-parser-3.2.0.tgz", {}, "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="], + + "jsonfile": ["jsonfile@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsonfile/-/jsonfile-4.0.0.tgz", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + + "jsonparse": ["jsonparse@1.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsonparse/-/jsonparse-1.3.1.tgz", {}, "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg=="], + + "jsonwebtoken": ["jsonwebtoken@9.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", { "dependencies": { "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" } }, "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ=="], + + "jsprim": ["jsprim@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsprim/-/jsprim-2.0.2.tgz", { "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ=="], + + "jwa": ["jwa@1.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jwa/-/jwa-1.4.2.tgz", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw=="], + + "jws": ["jws@3.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jws/-/jws-3.2.2.tgz", { "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA=="], + + "keyv": ["keyv@4.5.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/keyv/-/keyv-4.5.4.tgz", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "kill-port": ["kill-port@1.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/kill-port/-/kill-port-1.6.1.tgz", { "dependencies": { "get-them-args": "1.3.2", "shell-exec": "1.0.2" }, "bin": { "kill-port": "cli.js" } }, "sha512-un0Y55cOM7JKGaLnGja28T38tDDop0AQ8N0KlAdyh+B1nmMoX8AnNmqPNZbS3mUMgiST51DCVqmbFT1gNJpVNw=="], + + "kind-of": ["kind-of@6.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/kind-of/-/kind-of-6.0.3.tgz", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + + "knip": ["knip@5.71.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/knip/-/knip-5.71.0.tgz", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "jiti": "^2.6.0", "js-yaml": "^4.1.1", "minimist": "^1.2.8", "oxc-resolver": "^11.13.2", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.5.2", "strip-json-comments": "5.0.3", "zod": "^4.1.11" }, "peerDependencies": { "@types/node": ">=18", "typescript": ">=5.0.4 <7" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-hwgdqEJ+7DNJ5jE8BCPu7b57TY7vUwP6MzWYgCgPpg6iPCee/jKPShDNIlFER2koti4oz5xF88VJbKCb4Wl71g=="], + + "leven": ["leven@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/leven/-/leven-3.1.0.tgz", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], + + "levn": ["levn@0.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/levn/-/levn-0.4.1.tgz", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "lilconfig": ["lilconfig@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lilconfig/-/lilconfig-2.1.0.tgz", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + + "lines-and-columns": ["lines-and-columns@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lines-and-columns/-/lines-and-columns-2.0.3.tgz", {}, "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w=="], + + "livereload-js": ["livereload-js@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/livereload-js/-/livereload-js-4.0.2.tgz", {}, "sha512-Fy7VwgQNiOkynYyNBTo3v9hQUhcW5pFAheJN148+DTgpShjsy/22pLHKKwDK5v0kOsZsJBK+6q1PMgLvRmrwFQ=="], + + "loader-runner": ["loader-runner@4.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/loader-runner/-/loader-runner-4.3.1.tgz", {}, "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="], + + "loader-utils": ["loader-utils@2.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/loader-utils/-/loader-utils-2.0.4.tgz", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="], + + "locate-path": ["locate-path@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/locate-path/-/locate-path-6.0.0.tgz", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lockfile": ["lockfile@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lockfile/-/lockfile-1.0.4.tgz", { "dependencies": { "signal-exit": "^3.0.2" } }, "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA=="], + + "lodash": ["lodash@4.17.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash/-/lodash-4.17.21.tgz", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.camelcase": ["lodash.camelcase@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], + + "lodash.debounce": ["lodash.debounce@4.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.debounce/-/lodash.debounce-4.0.8.tgz", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + + "lodash.includes": ["lodash.includes@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.includes/-/lodash.includes-4.3.0.tgz", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="], + + "lodash.isboolean": ["lodash.isboolean@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], + + "lodash.isinteger": ["lodash.isinteger@4.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", {}, "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="], + + "lodash.isnumber": ["lodash.isnumber@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", {}, "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="], + + "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], + + "lodash.isstring": ["lodash.isstring@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.isstring/-/lodash.isstring-4.0.1.tgz", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], + + "lodash.memoize": ["lodash.memoize@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.memoize/-/lodash.memoize-4.1.2.tgz", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], + + "lodash.merge": ["lodash.merge@4.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "lodash.once": ["lodash.once@4.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.once/-/lodash.once-4.1.1.tgz", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="], + + "lodash.uniq": ["lodash.uniq@4.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lodash.uniq/-/lodash.uniq-4.5.0.tgz", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], + + "log-symbols": ["log-symbols@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/log-symbols/-/log-symbols-4.1.0.tgz", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], + + "loose-envify": ["loose-envify@1.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/loose-envify/-/loose-envify-1.4.0.tgz", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + + "loupe": ["loupe@3.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/loupe/-/loupe-3.2.1.tgz", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], + + "lowdb": ["lowdb@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lowdb/-/lowdb-1.0.0.tgz", { "dependencies": { "graceful-fs": "^4.1.3", "is-promise": "^2.1.0", "lodash": "4", "pify": "^3.0.0", "steno": "^0.4.1" } }, "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ=="], + + "lowercase-keys": ["lowercase-keys@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lowercase-keys/-/lowercase-keys-3.0.0.tgz", {}, "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="], + + "lru-cache": ["lru-cache@7.18.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lru-cache/-/lru-cache-7.18.3.tgz", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], + + "magic-string": ["magic-string@0.30.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/magic-string/-/magic-string-0.30.21.tgz", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "magicast": ["magicast@0.3.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/magicast/-/magicast-0.3.5.tgz", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], + + "make-dir": ["make-dir@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/make-dir/-/make-dir-4.0.0.tgz", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], + + "make-error": ["make-error@1.3.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/make-error/-/make-error-1.3.6.tgz", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], + + "makeerror": ["makeerror@1.0.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/makeerror/-/makeerror-1.0.12.tgz", { "dependencies": { "tmpl": "1.0.5" } }, "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/math-intrinsics/-/math-intrinsics-1.1.0.tgz", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "mdn-data": ["mdn-data@2.0.14", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mdn-data/-/mdn-data-2.0.14.tgz", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="], + + "media-typer": ["media-typer@0.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/media-typer/-/media-typer-0.3.0.tgz", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], + + "merge-descriptors": ["merge-descriptors@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/merge-descriptors/-/merge-descriptors-1.0.3.tgz", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], + + "merge-stream": ["merge-stream@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/merge-stream/-/merge-stream-2.0.0.tgz", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + + "merge2": ["merge2@1.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/merge2/-/merge2-1.4.1.tgz", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "methods": ["methods@1.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/methods/-/methods-1.1.2.tgz", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], + + "micromatch": ["micromatch@4.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/micromatch/-/micromatch-4.0.8.tgz", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mime": ["mime@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mime/-/mime-3.0.0.tgz", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], + + "mime-db": ["mime-db@1.52.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mime-db/-/mime-db-1.52.0.tgz", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mime-types/-/mime-types-2.1.35.tgz", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "mimic-fn": ["mimic-fn@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + + "mimic-response": ["mimic-response@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mimic-response/-/mimic-response-4.0.0.tgz", {}, "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg=="], + + "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", { "bin": { "mini-svg-data-uri": "cli.js" } }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], + + "minimatch": ["minimatch@9.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.3.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + + "minimist": ["minimist@1.2.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimist/-/minimist-1.2.8.tgz", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "minipass": ["minipass@7.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minipass/-/minipass-7.1.2.tgz", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "mitt": ["mitt@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mitt/-/mitt-3.0.1.tgz", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], + + "mkdirp": ["mkdirp@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mkdirp/-/mkdirp-1.0.4.tgz", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + + "mkdirp-classic": ["mkdirp-classic@0.5.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], + + "mrmime": ["mrmime@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mrmime/-/mrmime-2.0.1.tgz", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "ms": ["ms@2.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.1.3.tgz", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "mustache": ["mustache@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mustache/-/mustache-4.2.0.tgz", { "bin": { "mustache": "bin/mustache" } }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="], + + "mute-stream": ["mute-stream@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mute-stream/-/mute-stream-2.0.0.tgz", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], + + "nanoid": ["nanoid@3.3.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/nanoid/-/nanoid-3.3.11.tgz", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "napi-build-utils": ["napi-build-utils@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/napi-build-utils/-/napi-build-utils-2.0.0.tgz", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], + + "napi-postinstall": ["napi-postinstall@0.3.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/napi-postinstall/-/napi-postinstall-0.3.4.tgz", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], + + "natural-compare": ["natural-compare@1.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/natural-compare/-/natural-compare-1.4.0.tgz", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "negotiator": ["negotiator@0.6.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/negotiator/-/negotiator-0.6.4.tgz", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + + "neo-async": ["neo-async@2.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/neo-async/-/neo-async-2.6.2.tgz", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + + "netmask": ["netmask@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/netmask/-/netmask-2.0.2.tgz", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], + + "node-abi": ["node-abi@3.80.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/node-abi/-/node-abi-3.80.0.tgz", { "dependencies": { "semver": "^7.3.5" } }, "sha512-LyPuZJcI9HVwzXK1GPxWNzrr+vr8Hp/3UqlmWxxh8p54U1ZbclOqbSog9lWHaCX+dBaiGi6n/hIX+mKu74GmPA=="], + + "node-cache": ["node-cache@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/node-cache/-/node-cache-5.1.2.tgz", { "dependencies": { "clone": "2.x" } }, "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg=="], + + "node-fetch": ["node-fetch@2.6.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/node-fetch/-/node-fetch-2.6.7.tgz", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="], + + "node-int64": ["node-int64@0.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/node-int64/-/node-int64-0.4.0.tgz", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], + + "node-machine-id": ["node-machine-id@1.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/node-machine-id/-/node-machine-id-1.1.12.tgz", {}, "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ=="], + + "node-releases": ["node-releases@2.0.27", "https://jfrog.booking.com:443/artifactory/api/npm/npm/node-releases/-/node-releases-2.0.27.tgz", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "node-watch": ["node-watch@0.7.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/node-watch/-/node-watch-0.7.4.tgz", {}, "sha512-RinNxoz4W1cep1b928fuFhvAQ5ag/+1UlMDV7rbyGthBIgsiEouS4kvRayvvboxii4m8eolKOIBo3OjDqbc+uQ=="], + + "normalize-path": ["normalize-path@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/normalize-path/-/normalize-path-3.0.0.tgz", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "normalize-range": ["normalize-range@0.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/normalize-range/-/normalize-range-0.1.2.tgz", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], + + "normalize-url": ["normalize-url@6.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/normalize-url/-/normalize-url-6.1.0.tgz", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], + + "npm-package-arg": ["npm-package-arg@11.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/npm-package-arg/-/npm-package-arg-11.0.1.tgz", { "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" } }, "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ=="], + + "npm-run-path": ["npm-run-path@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/npm-run-path/-/npm-run-path-4.0.1.tgz", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], + + "nth-check": ["nth-check@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/nth-check/-/nth-check-2.1.1.tgz", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "nwsapi": ["nwsapi@2.2.22", "https://jfrog.booking.com:443/artifactory/api/npm/npm/nwsapi/-/nwsapi-2.2.22.tgz", {}, "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ=="], + + "nx": ["nx@22.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/nx/-/nx-22.1.1.tgz", { "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.2", "@zkochan/js-yaml": "0.0.7", "axios": "^1.12.0", "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": "^7.0.5", "jest-diff": "^30.0.2", "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.6.3", "string-width": "^4.2.3", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tree-kill": "^1.2.2", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", "yaml": "^2.6.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "22.1.1", "@nx/nx-darwin-x64": "22.1.1", "@nx/nx-freebsd-x64": "22.1.1", "@nx/nx-linux-arm-gnueabihf": "22.1.1", "@nx/nx-linux-arm64-gnu": "22.1.1", "@nx/nx-linux-arm64-musl": "22.1.1", "@nx/nx-linux-x64-gnu": "22.1.1", "@nx/nx-linux-x64-musl": "22.1.1", "@nx/nx-win32-arm64-msvc": "22.1.1", "@nx/nx-win32-x64-msvc": "22.1.1" }, "peerDependencies": { "@swc-node/register": "^1.8.0", "@swc/core": "^1.3.85" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "bin/nx.js", "nx-cloud": "bin/nx-cloud.js" } }, "sha512-D4lHv44aPQ0wtCaM14wwRK4NNJVT+J+RqW1x6kovNYNJm5oUk0Skg1ggB2OZL7ZAr8igiRG1X7wLrwmYFdPeqA=="], + + "nx-mcp": ["nx-mcp@0.6.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/nx-mcp/-/nx-mcp-0.6.12.tgz", { "bin": { "nx-mcp": "main.js" } }, "sha512-zN+3HHZfi0qjue78Z1aHcyrrpaDDy4Q4aE/ETCM1al7S5XHE2kRssOgOgvgNF/swugdEyMKesnGb5X2DsxPDBw=="], + + "nx-sync": ["nx-sync@workspace:tools/nx-sync"], + + "nx-tsdown": ["nx-tsdown@workspace:tools/nx-tsdown"], + + "nx-typecheck": ["nx-typecheck@workspace:tools/nx-typecheck"], + + "nx-vitest": ["nx-vitest@workspace:tools/nx-vitest"], + + "oauth4webapi": ["oauth4webapi@3.8.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/oauth4webapi/-/oauth4webapi-3.8.2.tgz", {}, "sha512-FzZZ+bht5X0FKe7Mwz3DAVAmlH1BV5blSak/lHMBKz0/EBMhX6B10GlQYI51+oRp8ObJaX0g6pXrAxZh5s8rjw=="], + + "object-assign": ["object-assign@4.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/object-assign/-/object-assign-4.1.1.tgz", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-inspect": ["object-inspect@1.13.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/object-inspect/-/object-inspect-1.13.4.tgz", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "object-keys": ["object-keys@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/object-keys/-/object-keys-1.1.1.tgz", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "object.assign": ["object.assign@4.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/object.assign/-/object.assign-4.1.7.tgz", { "dependencies": { "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" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + + "object.fromentries": ["object.fromentries@2.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/object.fromentries/-/object.fromentries-2.0.8.tgz", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], + + "object.groupby": ["object.groupby@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/object.groupby/-/object.groupby-1.0.3.tgz", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="], + + "object.values": ["object.values@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/object.values/-/object.values-1.2.1.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], + + "obug": ["obug@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/obug/-/obug-2.1.1.tgz", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], + + "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], + + "on-finished": ["on-finished@2.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/on-finished/-/on-finished-2.4.1.tgz", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "on-headers": ["on-headers@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/on-headers/-/on-headers-1.0.2.tgz", {}, "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="], + + "once": ["once@1.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/once/-/once-1.4.0.tgz", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "onetime": ["onetime@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/onetime/-/onetime-5.1.2.tgz", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "open": ["open@10.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/open/-/open-10.2.0.tgz", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], + + "opener": ["opener@1.5.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/opener/-/opener-1.5.2.tgz", { "bin": { "opener": "bin/opener-bin.js" } }, "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="], + + "openid-client": ["openid-client@6.8.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/openid-client/-/openid-client-6.8.1.tgz", { "dependencies": { "jose": "^6.1.0", "oauth4webapi": "^3.8.2" } }, "sha512-VoYT6enBo6Vj2j3Q5Ec0AezS+9YGzQo1f5Xc42lreMGlfP4ljiXPKVDvCADh+XHCV/bqPu/wWSiCVXbJKvrODw=="], + + "optionator": ["optionator@0.9.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/optionator/-/optionator-0.9.4.tgz", { "dependencies": { "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" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "ora": ["ora@5.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ora/-/ora-5.3.0.tgz", { "dependencies": { "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" } }, "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g=="], + + "own-keys": ["own-keys@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/own-keys/-/own-keys-1.0.1.tgz", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + + "oxc-resolver": ["oxc-resolver@11.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/oxc-resolver/-/oxc-resolver-11.14.0.tgz", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.14.0", "@oxc-resolver/binding-android-arm64": "11.14.0", "@oxc-resolver/binding-darwin-arm64": "11.14.0", "@oxc-resolver/binding-darwin-x64": "11.14.0", "@oxc-resolver/binding-freebsd-x64": "11.14.0", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.14.0", "@oxc-resolver/binding-linux-arm-musleabihf": "11.14.0", "@oxc-resolver/binding-linux-arm64-gnu": "11.14.0", "@oxc-resolver/binding-linux-arm64-musl": "11.14.0", "@oxc-resolver/binding-linux-ppc64-gnu": "11.14.0", "@oxc-resolver/binding-linux-riscv64-gnu": "11.14.0", "@oxc-resolver/binding-linux-riscv64-musl": "11.14.0", "@oxc-resolver/binding-linux-s390x-gnu": "11.14.0", "@oxc-resolver/binding-linux-x64-gnu": "11.14.0", "@oxc-resolver/binding-linux-x64-musl": "11.14.0", "@oxc-resolver/binding-wasm32-wasi": "11.14.0", "@oxc-resolver/binding-win32-arm64-msvc": "11.14.0", "@oxc-resolver/binding-win32-ia32-msvc": "11.14.0", "@oxc-resolver/binding-win32-x64-msvc": "11.14.0" } }, "sha512-i4wNrqhOd+4YdHJfHglHtFiqqSxXuzFA+RUqmmWN1aMD3r1HqUSrIhw17tSO4jwKfhLs9uw1wzFPmvMsWacStg=="], + + "p-cancelable": ["p-cancelable@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-cancelable/-/p-cancelable-3.0.0.tgz", {}, "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw=="], + + "p-finally": ["p-finally@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-finally/-/p-finally-1.0.0.tgz", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], + + "p-limit": ["p-limit@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-limit/-/p-limit-3.1.0.tgz", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-locate/-/p-locate-5.0.0.tgz", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "p-queue": ["p-queue@6.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-queue/-/p-queue-6.6.2.tgz", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], + + "p-timeout": ["p-timeout@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-timeout/-/p-timeout-3.2.0.tgz", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], + + "p-try": ["p-try@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-try/-/p-try-2.2.0.tgz", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + + "p2-cli": ["p2-cli@workspace:tools/p2-cli"], + + "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="], + + "pac-resolver": ["pac-resolver@7.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pac-resolver/-/pac-resolver-7.0.1.tgz", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "pako": ["pako@0.2.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pako/-/pako-0.2.9.tgz", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], + + "parent-module": ["parent-module@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/parent-module/-/parent-module-1.0.1.tgz", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parse-json": ["parse-json@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/parse-json/-/parse-json-5.2.0.tgz", { "dependencies": { "@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" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + + "parse5": ["parse5@7.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/parse5/-/parse5-7.3.0.tgz", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + + "parseurl": ["parseurl@1.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/parseurl/-/parseurl-1.3.3.tgz", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "patch-console": ["patch-console@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/patch-console/-/patch-console-2.0.0.tgz", {}, "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA=="], + + "path-browserify": ["path-browserify@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-browserify/-/path-browserify-1.0.1.tgz", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + + "path-exists": ["path-exists@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-exists/-/path-exists-4.0.0.tgz", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-key/-/path-key-3.1.1.tgz", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-parse/-/path-parse-1.0.7.tgz", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-scurry": ["path-scurry@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-scurry/-/path-scurry-1.11.1.tgz", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "path-to-regexp": ["path-to-regexp@0.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-to-regexp/-/path-to-regexp-0.1.12.tgz", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], + + "path-type": ["path-type@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/path-type/-/path-type-4.0.0.tgz", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "pathe": ["pathe@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pathe/-/pathe-2.0.3.tgz", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "pathval": ["pathval@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pathval/-/pathval-2.0.1.tgz", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], + + "peek-stream": ["peek-stream@1.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/peek-stream/-/peek-stream-1.1.3.tgz", { "dependencies": { "buffer-from": "^1.0.0", "duplexify": "^3.5.0", "through2": "^2.0.3" } }, "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA=="], + + "pend": ["pend@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pend/-/pend-1.2.0.tgz", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + + "performance-now": ["performance-now@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/performance-now/-/performance-now-2.1.0.tgz", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="], + + "picocolors": ["picocolors@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picocolors/-/picocolors-1.1.1.tgz", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.2.tgz", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "pify": ["pify@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pify/-/pify-5.0.0.tgz", {}, "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA=="], + + "pino": ["pino@8.21.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pino/-/pino-8.21.0.tgz", { "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" } }, "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q=="], + + "pino-abstract-transport": ["pino-abstract-transport@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", { "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q=="], + + "pino-pretty": ["pino-pretty@10.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pino-pretty/-/pino-pretty-10.3.1.tgz", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^3.0.0", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^1.0.0", "pump": "^3.0.0", "readable-stream": "^4.0.0", "secure-json-parse": "^2.4.0", "sonic-boom": "^3.0.0", "strip-json-comments": "^3.1.1" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g=="], + + "pino-std-serializers": ["pino-std-serializers@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", {}, "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA=="], + + "pirates": ["pirates@4.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pirates/-/pirates-4.0.7.tgz", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + + "piscina": ["piscina@4.9.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/piscina/-/piscina-4.9.2.tgz", { "optionalDependencies": { "@napi-rs/nice": "^1.0.1" } }, "sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ=="], + + "pkg-dir": ["pkg-dir@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pkg-dir/-/pkg-dir-4.2.0.tgz", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], + + "pkginfo": ["pkginfo@0.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pkginfo/-/pkginfo-0.4.1.tgz", {}, "sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ=="], + + "playwright": ["playwright@1.57.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/playwright/-/playwright-1.57.0.tgz", { "dependencies": { "playwright-core": "1.57.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw=="], + + "playwright-core": ["playwright-core@1.57.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/playwright-core/-/playwright-core-1.57.0.tgz", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="], + + "pluralize": ["pluralize@8.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pluralize/-/pluralize-8.0.0.tgz", {}, "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="], + + "portfinder": ["portfinder@1.0.38", "https://jfrog.booking.com:443/artifactory/api/npm/npm/portfinder/-/portfinder-1.0.38.tgz", { "dependencies": { "async": "^3.2.6", "debug": "^4.3.6" } }, "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "postcss": ["postcss@8.5.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss/-/postcss-8.5.6.tgz", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "postcss-calc": ["postcss-calc@8.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-calc/-/postcss-calc-8.2.4.tgz", { "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" } }, "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q=="], + + "postcss-colormin": ["postcss-colormin@5.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-colormin/-/postcss-colormin-5.3.1.tgz", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ=="], + + "postcss-convert-values": ["postcss-convert-values@5.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA=="], + + "postcss-discard-comments": ["postcss-discard-comments@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ=="], + + "postcss-discard-duplicates": ["postcss-discard-duplicates@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw=="], + + "postcss-discard-empty": ["postcss-discard-empty@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A=="], + + "postcss-discard-overridden": ["postcss-discard-overridden@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw=="], + + "postcss-load-config": ["postcss-load-config@3.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-load-config/-/postcss-load-config-3.1.4.tgz", { "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg=="], + + "postcss-merge-longhand": ["postcss-merge-longhand@5.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ=="], + + "postcss-merge-rules": ["postcss-merge-rules@5.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g=="], + + "postcss-minify-font-values": ["postcss-minify-font-values@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA=="], + + "postcss-minify-gradients": ["postcss-minify-gradients@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", { "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw=="], + + "postcss-minify-params": ["postcss-minify-params@5.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", { "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw=="], + + "postcss-minify-selectors": ["postcss-minify-selectors@5.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg=="], + + "postcss-modules": ["postcss-modules@4.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-modules/-/postcss-modules-4.3.1.tgz", { "dependencies": { "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" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q=="], + + "postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="], + + "postcss-modules-local-by-default": ["postcss-modules-local-by-default@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", { "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw=="], + + "postcss-modules-scope": ["postcss-modules-scope@3.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA=="], + + "postcss-modules-values": ["postcss-modules-values@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", { "dependencies": { "icss-utils": "^5.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="], + + "postcss-normalize-charset": ["postcss-normalize-charset@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg=="], + + "postcss-normalize-display-values": ["postcss-normalize-display-values@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA=="], + + "postcss-normalize-positions": ["postcss-normalize-positions@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg=="], + + "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g=="], + + "postcss-normalize-string": ["postcss-normalize-string@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w=="], + + "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg=="], + + "postcss-normalize-unicode": ["postcss-normalize-unicode@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA=="], + + "postcss-normalize-url": ["postcss-normalize-url@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", { "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew=="], + + "postcss-normalize-whitespace": ["postcss-normalize-whitespace@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA=="], + + "postcss-ordered-values": ["postcss-ordered-values@5.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", { "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ=="], + + "postcss-reduce-initial": ["postcss-reduce-initial@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg=="], + + "postcss-reduce-transforms": ["postcss-reduce-transforms@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ=="], + + "postcss-selector-parser": ["postcss-selector-parser@7.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-svgo": ["postcss-svgo@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-svgo/-/postcss-svgo-5.1.0.tgz", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA=="], + + "postcss-unique-selectors": ["postcss-unique-selectors@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "prebuild-install": ["prebuild-install@7.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/prebuild-install/-/prebuild-install-7.1.3.tgz", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], + + "prelude-ls": ["prelude-ls@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "prettier": ["prettier@2.8.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/prettier/-/prettier-2.8.8.tgz", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], + + "pretty-format": ["pretty-format@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.2.0.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "proc-log": ["proc-log@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/proc-log/-/proc-log-3.0.0.tgz", {}, "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A=="], + + "process": ["process@0.11.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/process/-/process-0.11.10.tgz", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "process-warning": ["process-warning@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/process-warning/-/process-warning-3.0.0.tgz", {}, "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="], + + "progress": ["progress@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/progress/-/progress-2.0.3.tgz", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + + "promise.series": ["promise.series@0.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/promise.series/-/promise.series-0.2.0.tgz", {}, "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ=="], + + "proxy-addr": ["proxy-addr@2.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/proxy-addr/-/proxy-addr-2.0.7.tgz", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + + "proxy-agent": ["proxy-agent@6.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/proxy-agent/-/proxy-agent-6.5.0.tgz", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="], + + "proxy-from-env": ["proxy-from-env@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "pump": ["pump@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pump/-/pump-3.0.3.tgz", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], + + "pumpify": ["pumpify@1.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pumpify/-/pumpify-1.5.1.tgz", { "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } }, "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ=="], + + "punycode": ["punycode@2.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/punycode/-/punycode-2.3.1.tgz", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "puppeteer": ["puppeteer@24.30.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/puppeteer/-/puppeteer-24.30.0.tgz", { "dependencies": { "@puppeteer/browsers": "2.10.13", "chromium-bidi": "11.0.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1521046", "puppeteer-core": "24.30.0", "typed-query-selector": "^2.12.0" }, "bin": { "puppeteer": "lib/cjs/puppeteer/node/cli.js" } }, "sha512-A5OtCi9WpiXBQgJ2vQiZHSyrAzQmO/WDsvghqlN4kgw21PhxA5knHUaUQq/N3EMt8CcvSS0RM+kmYLJmedR3TQ=="], + + "puppeteer-core": ["puppeteer-core@24.30.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/puppeteer-core/-/puppeteer-core-24.30.0.tgz", { "dependencies": { "@puppeteer/browsers": "2.10.13", "chromium-bidi": "11.0.0", "debug": "^4.4.3", "devtools-protocol": "0.0.1521046", "typed-query-selector": "^2.12.0", "webdriver-bidi-protocol": "0.3.8", "ws": "^8.18.3" } }, "sha512-2S3Smy0t0W4wJnNvDe7W0bE7wDmZjfZ3ljfMgJd6hn2Hq/f0jgN+x9PULZo2U3fu5UUIJ+JP8cNUGllu8P91Pg=="], + + "pure-rand": ["pure-rand@7.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pure-rand/-/pure-rand-7.0.1.tgz", {}, "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ=="], + + "qs": ["qs@6.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/qs/-/qs-6.14.0.tgz", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], + + "quansync": ["quansync@0.2.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/quansync/-/quansync-0.2.11.tgz", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], + + "queue-microtask": ["queue-microtask@1.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/queue-microtask/-/queue-microtask-1.2.3.tgz", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], + + "quick-lru": ["quick-lru@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/quick-lru/-/quick-lru-5.1.1.tgz", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], + + "randombytes": ["randombytes@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/randombytes/-/randombytes-2.1.0.tgz", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "range-parser": ["range-parser@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/range-parser/-/range-parser-1.2.1.tgz", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "raw-body": ["raw-body@2.5.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/raw-body/-/raw-body-2.5.2.tgz", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA=="], + + "rc": ["rc@1.2.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rc/-/rc-1.2.8.tgz", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + + "react": ["react@18.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/react/-/react-18.3.1.tgz", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="], + + "react-is": ["react-is@18.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/react-is/-/react-is-18.3.1.tgz", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + + "react-reconciler": ["react-reconciler@0.29.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/react-reconciler/-/react-reconciler-0.29.2.tgz", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg=="], + + "readable-stream": ["readable-stream@4.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/readable-stream/-/readable-stream-4.7.0.tgz", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + + "readdirp": ["readdirp@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/readdirp/-/readdirp-4.1.2.tgz", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "real-require": ["real-require@0.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/real-require/-/real-require-0.2.0.tgz", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], + + "reflect-metadata": ["reflect-metadata@0.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/reflect-metadata/-/reflect-metadata-0.2.2.tgz", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], + + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], + + "regenerate": ["regenerate@1.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/regenerate/-/regenerate-1.4.2.tgz", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], + + "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "regexpu-core": ["regexpu-core@6.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/regexpu-core/-/regexpu-core-6.4.0.tgz", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], + + "regjsgen": ["regjsgen@0.8.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/regjsgen/-/regjsgen-0.8.0.tgz", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], + + "regjsparser": ["regjsparser@0.13.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/regjsparser/-/regjsparser-0.13.0.tgz", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q=="], + + "require-directory": ["require-directory@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/require-directory/-/require-directory-2.1.1.tgz", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-from-string": ["require-from-string@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/require-from-string/-/require-from-string-2.0.2.tgz", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "requires-port": ["requires-port@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/requires-port/-/requires-port-1.0.0.tgz", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], + + "resolve": ["resolve@1.22.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve/-/resolve-1.22.11.tgz", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + + "resolve-alpn": ["resolve-alpn@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve-alpn/-/resolve-alpn-1.2.1.tgz", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], + + "resolve-cwd": ["resolve-cwd@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve-cwd/-/resolve-cwd-3.0.0.tgz", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="], + + "resolve-from": ["resolve-from@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve-from/-/resolve-from-4.0.0.tgz", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "resolve.exports": ["resolve.exports@2.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve.exports/-/resolve.exports-2.0.3.tgz", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="], + + "responselike": ["responselike@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/responselike/-/responselike-3.0.0.tgz", { "dependencies": { "lowercase-keys": "^3.0.0" } }, "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg=="], + + "restore-cursor": ["restore-cursor@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/restore-cursor/-/restore-cursor-3.1.0.tgz", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + + "reusify": ["reusify@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/reusify/-/reusify-1.1.0.tgz", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rolldown": ["rolldown@1.0.0-beta.51", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rolldown/-/rolldown-1.0.0-beta.51.tgz", { "dependencies": { "@oxc-project/types": "=0.98.0", "@rolldown/pluginutils": "1.0.0-beta.51" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-beta.51", "@rolldown/binding-darwin-arm64": "1.0.0-beta.51", "@rolldown/binding-darwin-x64": "1.0.0-beta.51", "@rolldown/binding-freebsd-x64": "1.0.0-beta.51", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.51", "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.51", "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.51", "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.51", "@rolldown/binding-linux-x64-musl": "1.0.0-beta.51", "@rolldown/binding-openharmony-arm64": "1.0.0-beta.51", "@rolldown/binding-wasm32-wasi": "1.0.0-beta.51", "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.51", "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.51", "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.51" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-ZRLgPlS91l4JztLYEZnmMcd3Umcla1hkXJgiEiR4HloRJBBoeaX8qogTu5Jfu36rRMVLndzqYv0h+M5gJAkUfg=="], + + "rolldown-plugin-dts": ["rolldown-plugin-dts@0.18.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rolldown-plugin-dts/-/rolldown-plugin-dts-0.18.1.tgz", { "dependencies": { "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ast-kit": "^2.2.0", "birpc": "^2.8.0", "dts-resolver": "^2.1.3", "get-tsconfig": "^4.13.0", "magic-string": "^0.30.21", "obug": "^2.1.1" }, "peerDependencies": { "@ts-macro/tsc": "^0.3.6", "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.51", "typescript": "^5.0.0", "vue-tsc": "~3.1.0" }, "optionalPeers": ["@ts-macro/tsc", "@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-uIgNMix6OI+6bSkw0nw6O+G/ydPRCWKwvvcEyL6gWkVkSFVGWWO23DX4ZYVOqC7w5u2c8uPY9Q74U0QCKvegFA=="], + + "rollup": ["rollup@4.53.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rollup/-/rollup-4.53.2.tgz", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.2", "@rollup/rollup-android-arm64": "4.53.2", "@rollup/rollup-darwin-arm64": "4.53.2", "@rollup/rollup-darwin-x64": "4.53.2", "@rollup/rollup-freebsd-arm64": "4.53.2", "@rollup/rollup-freebsd-x64": "4.53.2", "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", "@rollup/rollup-linux-arm-musleabihf": "4.53.2", "@rollup/rollup-linux-arm64-gnu": "4.53.2", "@rollup/rollup-linux-arm64-musl": "4.53.2", "@rollup/rollup-linux-loong64-gnu": "4.53.2", "@rollup/rollup-linux-ppc64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-musl": "4.53.2", "@rollup/rollup-linux-s390x-gnu": "4.53.2", "@rollup/rollup-linux-x64-gnu": "4.53.2", "@rollup/rollup-linux-x64-musl": "4.53.2", "@rollup/rollup-openharmony-arm64": "4.53.2", "@rollup/rollup-win32-arm64-msvc": "4.53.2", "@rollup/rollup-win32-ia32-msvc": "4.53.2", "@rollup/rollup-win32-x64-gnu": "4.53.2", "@rollup/rollup-win32-x64-msvc": "4.53.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g=="], + + "rollup-plugin-copy": ["rollup-plugin-copy@3.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz", { "dependencies": { "@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" } }, "sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA=="], + + "rollup-plugin-postcss": ["rollup-plugin-postcss@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", { "dependencies": { "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" }, "peerDependencies": { "postcss": "8.x" } }, "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w=="], + + "rollup-plugin-typescript2": ["rollup-plugin-typescript2@0.36.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", { "dependencies": { "@rollup/pluginutils": "^4.1.2", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", "semver": "^7.5.4", "tslib": "^2.6.2" }, "peerDependencies": { "rollup": ">=1.26.3", "typescript": ">=2.4.0" } }, "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw=="], + + "rollup-pluginutils": ["rollup-pluginutils@2.8.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", { "dependencies": { "estree-walker": "^0.6.1" } }, "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ=="], + + "rrweb-cssom": ["rrweb-cssom@0.8.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], + + "run-applescript": ["run-applescript@7.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/run-applescript/-/run-applescript-7.1.0.tgz", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], + + "run-parallel": ["run-parallel@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/run-parallel/-/run-parallel-1.2.0.tgz", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-array-concat": ["safe-array-concat@1.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-array-concat/-/safe-array-concat-1.1.3.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + + "safe-buffer": ["safe-buffer@5.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-identifier": ["safe-identifier@0.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-identifier/-/safe-identifier-0.4.2.tgz", {}, "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w=="], + + "safe-push-apply": ["safe-push-apply@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-push-apply/-/safe-push-apply-1.0.0.tgz", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-regex-test/-/safe-regex-test-1.1.0.tgz", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + + "safer-buffer": ["safer-buffer@2.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "sample-tsdown": ["sample-tsdown@workspace:samples/sample-tsdown"], + + "sax": ["sax@1.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sax/-/sax-1.4.3.tgz", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="], + + "saxes": ["saxes@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/saxes/-/saxes-6.0.0.tgz", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], + + "scheduler": ["scheduler@0.23.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/scheduler/-/scheduler-0.23.2.tgz", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], + + "schema-utils": ["schema-utils@4.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/schema-utils/-/schema-utils-4.3.3.tgz", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + + "secure-compare": ["secure-compare@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/secure-compare/-/secure-compare-3.0.1.tgz", {}, "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw=="], + + "secure-json-parse": ["secure-json-parse@2.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/secure-json-parse/-/secure-json-parse-2.7.0.tgz", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], + + "seek-bzip": ["seek-bzip@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/seek-bzip/-/seek-bzip-2.0.0.tgz", { "dependencies": { "commander": "^6.0.0" }, "bin": { "seek-bunzip": "bin/seek-bunzip", "seek-table": "bin/seek-bzip-table" } }, "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg=="], + + "semver": ["semver@7.7.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-7.7.3.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + + "semver-regex": ["semver-regex@4.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver-regex/-/semver-regex-4.0.5.tgz", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="], + + "semver-truncate": ["semver-truncate@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver-truncate/-/semver-truncate-3.0.0.tgz", { "dependencies": { "semver": "^7.3.5" } }, "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg=="], + + "send": ["send@0.19.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/send/-/send-0.19.0.tgz", { "dependencies": { "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" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], + + "serialize-javascript": ["serialize-javascript@6.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/serialize-javascript/-/serialize-javascript-6.0.2.tgz", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + + "serve-static": ["serve-static@1.16.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/serve-static/-/serve-static-1.16.2.tgz", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" } }, "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw=="], + + "set-function-length": ["set-function-length@1.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/set-function-length/-/set-function-length-1.2.2.tgz", { "dependencies": { "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" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/set-function-name/-/set-function-name-2.0.2.tgz", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "set-proto": ["set-proto@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/set-proto/-/set-proto-1.0.0.tgz", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + + "setprototypeof": ["setprototypeof@1.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/setprototypeof/-/setprototypeof-1.2.0.tgz", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "shebang-command": ["shebang-command@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/shebang-command/-/shebang-command-2.0.0.tgz", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shell-exec": ["shell-exec@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/shell-exec/-/shell-exec-1.0.2.tgz", {}, "sha512-jyVd+kU2X+mWKMmGhx4fpWbPsjvD53k9ivqetutVW/BQ+WIZoDoP4d8vUMGezV6saZsiNoW2f9GIhg9Dondohg=="], + + "side-channel": ["side-channel@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/side-channel/-/side-channel-1.1.0.tgz", { "dependencies": { "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" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/side-channel-list/-/side-channel-list-1.0.0.tgz", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/side-channel-map/-/side-channel-map-1.0.1.tgz", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", { "dependencies": { "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" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "siginfo": ["siginfo@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/siginfo/-/siginfo-2.0.0.tgz", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], + + "signal-exit": ["signal-exit@3.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/signal-exit/-/signal-exit-3.0.7.tgz", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "simple-concat": ["simple-concat@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/simple-concat/-/simple-concat-1.0.1.tgz", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], + + "simple-get": ["simple-get@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/simple-get/-/simple-get-4.0.1.tgz", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], + + "sirv": ["sirv@3.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sirv/-/sirv-3.0.2.tgz", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g=="], + + "slash": ["slash@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/slash/-/slash-3.0.0.tgz", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "slice-ansi": ["slice-ansi@7.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/slice-ansi/-/slice-ansi-7.1.2.tgz", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="], + + "smart-buffer": ["smart-buffer@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/smart-buffer/-/smart-buffer-4.2.0.tgz", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + + "smol-toml": ["smol-toml@1.5.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/smol-toml/-/smol-toml-1.5.2.tgz", {}, "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ=="], + + "socks": ["socks@2.8.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/socks/-/socks-2.8.7.tgz", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], + + "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], + + "sonic-boom": ["sonic-boom@3.8.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sonic-boom/-/sonic-boom-3.8.1.tgz", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg=="], + + "sort-keys": ["sort-keys@1.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sort-keys/-/sort-keys-1.1.2.tgz", { "dependencies": { "is-plain-obj": "^1.0.0" } }, "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg=="], + + "sort-keys-length": ["sort-keys-length@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sort-keys-length/-/sort-keys-length-1.0.1.tgz", { "dependencies": { "sort-keys": "^1.0.0" } }, "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw=="], + + "source-map": ["source-map@0.7.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.7.6.tgz", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + + "source-map-js": ["source-map-js@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map-js/-/source-map-js-1.2.1.tgz", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.19", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map-support/-/source-map-support-0.5.19.tgz", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="], + + "speci": ["speci@workspace:packages/speci"], + + "split2": ["split2@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/split2/-/split2-4.2.0.tgz", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "sprintf-js": ["sprintf-js@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sprintf-js/-/sprintf-js-1.0.3.tgz", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + + "sshpk": ["sshpk@1.18.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sshpk/-/sshpk-1.18.0.tgz", { "dependencies": { "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" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" } }, "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ=="], + + "stable": ["stable@0.1.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/stable/-/stable-0.1.8.tgz", {}, "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="], + + "stable-hash-x": ["stable-hash-x@0.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/stable-hash-x/-/stable-hash-x-0.2.0.tgz", {}, "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ=="], + + "stack-utils": ["stack-utils@2.0.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/stack-utils/-/stack-utils-2.0.6.tgz", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], + + "stackback": ["stackback@0.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/stackback/-/stackback-0.0.2.tgz", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], + + "statuses": ["statuses@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/statuses/-/statuses-2.0.1.tgz", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + + "std-env": ["std-env@3.10.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/std-env/-/std-env-3.10.0.tgz", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + + "steno": ["steno@0.4.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/steno/-/steno-0.4.4.tgz", { "dependencies": { "graceful-fs": "^4.1.3" } }, "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w=="], + + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], + + "stream-shift": ["stream-shift@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/stream-shift/-/stream-shift-1.0.3.tgz", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="], + + "streamx": ["streamx@2.23.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/streamx/-/streamx-2.23.0.tgz", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="], + + "string-hash": ["string-hash@1.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-hash/-/string-hash-1.1.3.tgz", {}, "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="], + + "string-length": ["string-length@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-length/-/string-length-4.0.2.tgz", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="], + + "string-width": ["string-width@4.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string-width-cjs": ["string-width@4.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string.prototype.trim": ["string.prototype.trim@1.2.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], + + "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], + + "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], + + "string_decoder": ["string_decoder@1.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string_decoder/-/string_decoder-1.3.0.tgz", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-bom": ["strip-bom@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-bom/-/strip-bom-3.0.0.tgz", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + + "strip-dirs": ["strip-dirs@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-dirs/-/strip-dirs-3.0.0.tgz", { "dependencies": { "inspect-with-kind": "^1.0.5", "is-plain-obj": "^1.1.0" } }, "sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ=="], + + "strip-final-newline": ["strip-final-newline@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-final-newline/-/strip-final-newline-2.0.0.tgz", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + + "strip-json-comments": ["strip-json-comments@5.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-5.0.3.tgz", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="], + + "strip-literal": ["strip-literal@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-literal/-/strip-literal-3.1.0.tgz", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], + + "strnum": ["strnum@2.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strnum/-/strnum-2.1.1.tgz", {}, "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw=="], + + "strtok3": ["strtok3@10.3.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strtok3/-/strtok3-10.3.4.tgz", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="], + + "style-inject": ["style-inject@0.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/style-inject/-/style-inject-0.3.0.tgz", {}, "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw=="], + + "stylehacks": ["stylehacks@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/stylehacks/-/stylehacks-5.1.1.tgz", { "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw=="], + + "supports-color": ["supports-color@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-7.2.0.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "svgo": ["svgo@2.8.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/svgo/-/svgo-2.8.0.tgz", { "dependencies": { "@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" }, "bin": { "svgo": "bin/svgo" } }, "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg=="], + + "swc-loader": ["swc-loader@0.1.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/swc-loader/-/swc-loader-0.1.15.tgz", { "dependencies": { "loader-utils": "^2.0.0" }, "peerDependencies": { "@swc/core": "^1.2.52", "webpack": ">=2" } }, "sha512-cn1WPIeQJvXM4bbo3OwdEIapsQ4uUGOfyFj0h2+2+brT0k76DCGnZXDE2KmcqTd2JSQ+b61z2NPMib7eEwMYYw=="], + + "symbol-tree": ["symbol-tree@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/symbol-tree/-/symbol-tree-3.2.4.tgz", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + + "synckit": ["synckit@0.11.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/synckit/-/synckit-0.11.11.tgz", { "dependencies": { "@pkgr/core": "^0.2.9" } }, "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw=="], + + "tapable": ["tapable@2.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tapable/-/tapable-2.3.0.tgz", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + + "tar-fs": ["tar-fs@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tar-fs/-/tar-fs-3.1.1.tgz", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg=="], + + "tar-stream": ["tar-stream@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tar-stream/-/tar-stream-2.2.0.tgz", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], + + "tcp-port-used": ["tcp-port-used@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tcp-port-used/-/tcp-port-used-1.0.2.tgz", { "dependencies": { "debug": "4.3.1", "is2": "^2.0.6" } }, "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA=="], + + "terser": ["terser@5.44.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/terser/-/terser-5.44.1.tgz", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw=="], + + "terser-webpack-plugin": ["terser-webpack-plugin@5.3.14", "https://jfrog.booking.com:443/artifactory/api/npm/npm/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw=="], + + "test-exclude": ["test-exclude@7.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/test-exclude/-/test-exclude-7.0.1.tgz", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", "minimatch": "^9.0.4" } }, "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg=="], + + "text-decoder": ["text-decoder@1.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/text-decoder/-/text-decoder-1.2.3.tgz", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], + + "thread-stream": ["thread-stream@2.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/thread-stream/-/thread-stream-2.7.0.tgz", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw=="], + + "through": ["through@2.3.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/through/-/through-2.3.8.tgz", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], + + "through2": ["through2@2.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/through2/-/through2-2.0.5.tgz", { "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="], + + "tinybench": ["tinybench@2.9.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tinybench/-/tinybench-2.9.0.tgz", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], + + "tinyexec": ["tinyexec@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tinyexec/-/tinyexec-1.0.2.tgz", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + + "tinyglobby": ["tinyglobby@0.2.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tinyglobby/-/tinyglobby-0.2.15.tgz", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tinypool": ["tinypool@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tinypool/-/tinypool-1.1.1.tgz", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], + + "tinyrainbow": ["tinyrainbow@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tinyrainbow/-/tinyrainbow-2.0.0.tgz", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "tinyspy": ["tinyspy@4.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tinyspy/-/tinyspy-4.0.4.tgz", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], + + "tldts": ["tldts@6.1.86", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tldts/-/tldts-6.1.86.tgz", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], + + "tldts-core": ["tldts-core@6.1.86", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tldts-core/-/tldts-core-6.1.86.tgz", {}, "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA=="], + + "tmp": ["tmp@0.2.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tmp/-/tmp-0.2.5.tgz", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], + + "tmpl": ["tmpl@1.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tmpl/-/tmpl-1.0.5.tgz", {}, "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="], + + "to-regex-range": ["to-regex-range@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "to-rotated": ["to-rotated@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/to-rotated/-/to-rotated-1.0.0.tgz", {}, "sha512-KsEID8AfgUy+pxVRLsWp0VzCa69wxzUDZnzGbyIST/bcgcrMvTYoFBX/QORH4YApoD89EDuUovx4BTdpOn319Q=="], + + "toidentifier": ["toidentifier@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/toidentifier/-/toidentifier-1.0.1.tgz", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "token-types": ["token-types@6.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/token-types/-/token-types-6.1.1.tgz", { "dependencies": { "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ=="], + + "totalist": ["totalist@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/totalist/-/totalist-3.0.1.tgz", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], + + "tough-cookie": ["tough-cookie@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tough-cookie/-/tough-cookie-5.1.2.tgz", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], + + "tr46": ["tr46@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tr46/-/tr46-5.1.1.tgz", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], + + "tree-kill": ["tree-kill@1.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tree-kill/-/tree-kill-1.2.2.tgz", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], + + "ts-api-utils": ["ts-api-utils@2.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ts-api-utils/-/ts-api-utils-2.1.0.tgz", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], + + "ts-jest": ["ts-jest@29.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ts-jest/-/ts-jest-29.4.1.tgz", { "dependencies": { "bs-logger": "^0.2.6", "fast-json-stable-stringify": "^2.1.0", "handlebars": "^4.7.8", "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" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", "@jest/transform": "^29.0.0 || ^30.0.0", "@jest/types": "^29.0.0 || ^30.0.0", "babel-jest": "^29.0.0 || ^30.0.0", "jest": "^29.0.0 || ^30.0.0", "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "optionalPeers": ["@babel/core", "@jest/transform", "@jest/types", "babel-jest", "jest-util"], "bin": { "ts-jest": "cli.js" } }, "sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw=="], + + "ts-morph": ["ts-morph@27.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ts-morph/-/ts-morph-27.0.2.tgz", { "dependencies": { "@ts-morph/common": "~0.28.1", "code-block-writer": "^13.0.3" } }, "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w=="], + + "ts-node": ["ts-node@10.9.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ts-node/-/ts-node-10.9.1.tgz", { "dependencies": { "@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" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw=="], + + "ts-xsd": ["ts-xsd@workspace:packages/ts-xsd"], + + "tsconfig-paths": ["tsconfig-paths@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], + + "tsdown": ["tsdown@0.16.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tsdown/-/tsdown-0.16.7.tgz", { "dependencies": { "ansis": "^4.2.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "diff": "^8.0.2", "empathic": "^2.0.0", "hookable": "^5.5.3", "obug": "^2.1.1", "rolldown": "1.0.0-beta.51", "rolldown-plugin-dts": "^0.18.1", "semver": "^7.7.3", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tree-kill": "^1.2.2", "unconfig-core": "^7.4.1", "unrun": "^0.2.11" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "@vitejs/devtools": "^0.0.0-alpha.18", "publint": "^0.3.0", "typescript": "^5.0.0", "unplugin-lightningcss": "^0.4.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "@vitejs/devtools", "publint", "typescript", "unplugin-lightningcss", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-3rGG74MGc16rJ70ID7WyKnJBM5TIqGX5uYbmUCdiFIc2c3+KXka4nCeji3RRxhBw/hL7Xbs8pCY8x2cn0J+O0w=="], + + "tslib": ["tslib@2.8.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tslib/-/tslib-2.8.1.tgz", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tsx": ["tsx@4.20.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tsx/-/tsx-4.20.6.tgz", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg=="], + + "tunnel-agent": ["tunnel-agent@0.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tunnel-agent/-/tunnel-agent-0.6.0.tgz", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + + "tweetnacl": ["tweetnacl@0.14.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tweetnacl/-/tweetnacl-0.14.5.tgz", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="], + + "typanion": ["typanion@3.14.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typanion/-/typanion-3.14.0.tgz", {}, "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug=="], + + "type-check": ["type-check@0.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/type-check/-/type-check-0.4.0.tgz", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "type-detect": ["type-detect@4.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/type-detect/-/type-detect-4.0.8.tgz", {}, "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="], + + "type-fest": ["type-fest@4.41.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/type-fest/-/type-fest-4.41.0.tgz", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + + "type-is": ["type-is@1.6.18", "https://jfrog.booking.com:443/artifactory/api/npm/npm/type-is/-/type-is-1.6.18.tgz", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], + + "typed-array-buffer": ["typed-array-buffer@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + + "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], + + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], + + "typed-array-length": ["typed-array-length@1.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typed-array-length/-/typed-array-length-1.0.7.tgz", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + + "typed-query-selector": ["typed-query-selector@2.12.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typed-query-selector/-/typed-query-selector-2.12.0.tgz", {}, "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg=="], + + "typescript": ["typescript@5.9.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typescript/-/typescript-5.9.3.tgz", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "typescript-eslint": ["typescript-eslint@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typescript-eslint/-/typescript-eslint-8.43.0.tgz", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.43.0", "@typescript-eslint/parser": "8.43.0", "@typescript-eslint/typescript-estree": "8.43.0", "@typescript-eslint/utils": "8.43.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w=="], + + "uglify-js": ["uglify-js@3.19.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/uglify-js/-/uglify-js-3.19.3.tgz", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + + "uint8array-extras": ["uint8array-extras@1.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/uint8array-extras/-/uint8array-extras-1.5.0.tgz", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + + "unbox-primitive": ["unbox-primitive@1.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unbox-primitive/-/unbox-primitive-1.1.0.tgz", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + + "unbzip2-stream": ["unbzip2-stream@1.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", { "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg=="], + + "unconfig-core": ["unconfig-core@7.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unconfig-core/-/unconfig-core-7.4.1.tgz", { "dependencies": { "@quansync/fs": "^0.1.5", "quansync": "^0.2.11" } }, "sha512-Bp/bPZjV2Vl/fofoA2OYLSnw1Z0MOhCX7zHnVCYrazpfZvseBbGhwcNQMxsg185Mqh7VZQqK3C8hFG/Dyng+yA=="], + + "undici-types": ["undici-types@6.21.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/undici-types/-/undici-types-6.21.0.tgz", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="], + + "unicode-match-property-ecmascript": ["unicode-match-property-ecmascript@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", { "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q=="], + + "unicode-match-property-value-ecmascript": ["unicode-match-property-value-ecmascript@2.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", {}, "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg=="], + + "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", {}, "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ=="], + + "union": ["union@0.5.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/union/-/union-0.5.0.tgz", { "dependencies": { "qs": "^6.4.0" } }, "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA=="], + + "universalify": ["universalify@0.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/universalify/-/universalify-0.1.2.tgz", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + + "unix-crypt-td-js": ["unix-crypt-td-js@1.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", {}, "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw=="], + + "unpipe": ["unpipe@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unpipe/-/unpipe-1.0.0.tgz", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + + "unrs-resolver": ["unrs-resolver@1.11.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unrs-resolver/-/unrs-resolver-1.11.1.tgz", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], + + "unrun": ["unrun@0.2.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/unrun/-/unrun-0.2.11.tgz", { "dependencies": { "@oxc-project/runtime": "^0.96.0", "rolldown": "1.0.0-beta.51" }, "peerDependencies": { "synckit": "^0.11.11" }, "optionalPeers": ["synckit"], "bin": { "unrun": "dist/cli.mjs" } }, "sha512-HjUuNLRGfRxMvxkwOuO/CpkSzdizTPPApbarLplsTzUm8Kex+nS9eomKU1qgVus6WGWkDYhtf/mgNxGEpyTR6A=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="], + + "uri-js": ["uri-js@4.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/uri-js/-/uri-js-4.4.1.tgz", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "url-join": ["url-join@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/url-join/-/url-join-4.0.1.tgz", {}, "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="], + + "util-deprecate": ["util-deprecate@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "utils-merge": ["utils-merge@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/utils-merge/-/utils-merge-1.0.1.tgz", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], + + "uuid": ["uuid@8.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/uuid/-/uuid-8.3.2.tgz", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + + "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], + + "v8-to-istanbul": ["v8-to-istanbul@9.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="], + + "validate-npm-package-name": ["validate-npm-package-name@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", {}, "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ=="], + + "validator": ["validator@13.12.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/validator/-/validator-13.12.0.tgz", {}, "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg=="], + + "vary": ["vary@1.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/vary/-/vary-1.1.2.tgz", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "verdaccio": ["verdaccio@6.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/verdaccio/-/verdaccio-6.1.2.tgz", { "dependencies": { "@cypress/request": "3.0.8", "@verdaccio/auth": "8.0.0-next-8.15", "@verdaccio/config": "8.0.0-next-8.15", "@verdaccio/core": "8.0.0-next-8.15", "@verdaccio/loaders": "8.0.0-next-8.6", "@verdaccio/local-storage-legacy": "11.0.2", "@verdaccio/logger": "8.0.0-next-8.15", "@verdaccio/middleware": "8.0.0-next-8.15", "@verdaccio/search-indexer": "8.0.0-next-8.4", "@verdaccio/signature": "8.0.0-next-8.7", "@verdaccio/streams": "10.2.1", "@verdaccio/tarball": "13.0.0-next-8.15", "@verdaccio/ui-theme": "8.0.0-next-8.15", "@verdaccio/url": "13.0.0-next-8.15", "@verdaccio/utils": "8.1.0-next-8.15", "JSONStream": "1.3.5", "async": "3.2.6", "clipanion": "4.0.0-rc.4", "compression": "1.8.0", "cors": "2.8.5", "debug": "4.4.0", "envinfo": "7.14.0", "express": "4.21.2", "handlebars": "4.7.8", "lodash": "4.17.21", "lru-cache": "7.18.3", "mime": "3.0.0", "mkdirp": "1.0.4", "pkginfo": "0.4.1", "semver": "7.6.3", "verdaccio-audit": "13.0.0-next-8.15", "verdaccio-htpasswd": "13.0.0-next-8.15" }, "bin": { "verdaccio": "bin/verdaccio" } }, "sha512-HQCquycSQkA+tKRVqMjIVRzmhzTciLfScvKIhhiwZZ9Qd13e2KJQTOdB7QrSacfJuPpl94TA5EZ7XmVRQKk3ag=="], + + "verdaccio-audit": ["verdaccio-audit@13.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/verdaccio-audit/-/verdaccio-audit-13.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/config": "8.0.0-next-8.15", "@verdaccio/core": "8.0.0-next-8.15", "express": "4.21.2", "https-proxy-agent": "5.0.1", "node-fetch": "cjs" } }, "sha512-Aeau0u0fi5l4PoSDyOV6glz2FDO9+ofvogJIELV4H6fhDXhgPc2MnoKuaUgOT//khESLle/a6YfcLY2/KNLs6g=="], + + "verdaccio-htpasswd": ["verdaccio-htpasswd@13.0.0-next-8.15", "https://jfrog.booking.com:443/artifactory/api/npm/npm/verdaccio-htpasswd/-/verdaccio-htpasswd-13.0.0-next-8.15.tgz", { "dependencies": { "@verdaccio/core": "8.0.0-next-8.15", "@verdaccio/file-locking": "13.0.0-next-8.3", "apache-md5": "1.1.8", "bcryptjs": "2.4.3", "core-js": "3.40.0", "debug": "4.4.0", "http-errors": "2.0.0", "unix-crypt-td-js": "1.1.4" } }, "sha512-rQg5oZ/rReDAM4g4W68hvtzReTbM6vduvVtobHsQxhbtbotEuUjP6O8uaROYtgZ60giGva5Tub2SOm2T9Ln9Dw=="], + + "verror": ["verror@1.10.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/verror/-/verror-1.10.1.tgz", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg=="], + + "vite": ["vite@7.1.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/vite/-/vite-7.1.5.tgz", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ=="], + + "vite-node": ["vite-node@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/vite-node/-/vite-node-3.2.4.tgz", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], + + "vitest": ["vitest@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/vitest/-/vitest-3.2.4.tgz", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + + "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], + + "walk-up-path": ["walk-up-path@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/walk-up-path/-/walk-up-path-4.0.0.tgz", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], + + "walker": ["walker@1.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/walker/-/walker-1.0.8.tgz", { "dependencies": { "makeerror": "1.0.12" } }, "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ=="], + + "watchpack": ["watchpack@2.4.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/watchpack/-/watchpack-2.4.4.tgz", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA=="], + + "wcwidth": ["wcwidth@1.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wcwidth/-/wcwidth-1.0.1.tgz", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], + + "webdriver-bidi-protocol": ["webdriver-bidi-protocol@0.3.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.8.tgz", {}, "sha512-21Yi2GhGntMc671vNBCjiAeEVknXjVRoyu+k+9xOMShu+ZQfpGQwnBqbNz/Sv4GXZ6JmutlPAi2nIJcrymAWuQ=="], + + "webidl-conversions": ["webidl-conversions@7.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/webidl-conversions/-/webidl-conversions-7.0.0.tgz", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], + + "webpack": ["webpack@5.102.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/webpack/-/webpack-5.102.1.tgz", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.26.3", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.4", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ=="], + + "webpack-sources": ["webpack-sources@3.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/webpack-sources/-/webpack-sources-3.3.3.tgz", {}, "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg=="], + + "whatwg-encoding": ["whatwg-encoding@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], + + "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], + + "whatwg-url": ["whatwg-url@14.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/whatwg-url/-/whatwg-url-14.2.0.tgz", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], + + "which": ["which@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/which/-/which-2.0.2.tgz", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + + "which-builtin-type": ["which-builtin-type@1.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/which-builtin-type/-/which-builtin-type-1.2.1.tgz", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], + + "which-collection": ["which-collection@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/which-collection/-/which-collection-1.0.2.tgz", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + + "which-typed-array": ["which-typed-array@1.1.19", "https://jfrog.booking.com:443/artifactory/api/npm/npm/which-typed-array/-/which-typed-array-1.1.19.tgz", { "dependencies": { "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" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], + + "why-is-node-running": ["why-is-node-running@2.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/why-is-node-running/-/why-is-node-running-2.3.0.tgz", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], + + "widest-line": ["widest-line@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/widest-line/-/widest-line-5.0.0.tgz", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], + + "word-wrap": ["word-wrap@1.2.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/word-wrap/-/word-wrap-1.2.5.tgz", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wordwrap": ["wordwrap@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wordwrap/-/wordwrap-1.0.0.tgz", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + + "wrap-ansi": ["wrap-ansi@9.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-9.0.2.tgz", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wrappy/-/wrappy-1.0.2.tgz", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "write-file-atomic": ["write-file-atomic@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/write-file-atomic/-/write-file-atomic-5.0.1.tgz", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw=="], + + "ws": ["ws@8.18.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ws/-/ws-8.18.3.tgz", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + + "wsl-utils": ["wsl-utils@0.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wsl-utils/-/wsl-utils-0.1.0.tgz", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], + + "xml-js": ["xml-js@1.6.11", "https://jfrog.booking.com:443/artifactory/api/npm/npm/xml-js/-/xml-js-1.6.11.tgz", { "dependencies": { "sax": "^1.2.4" }, "bin": { "xml-js": "./bin/cli.js" } }, "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g=="], + + "xml-name-validator": ["xml-name-validator@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/xml-name-validator/-/xml-name-validator-5.0.0.tgz", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], + + "xmlbuilder": ["xmlbuilder@15.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/xmlbuilder/-/xmlbuilder-15.1.1.tgz", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], + + "xmlchars": ["xmlchars@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/xmlchars/-/xmlchars-2.2.0.tgz", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], + + "xtend": ["xtend@4.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/xtend/-/xtend-4.0.2.tgz", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], + + "y18n": ["y18n@5.0.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/y18n/-/y18n-5.0.8.tgz", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yallist": ["yallist@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yallist/-/yallist-3.1.1.tgz", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yaml": ["yaml@2.8.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yaml/-/yaml-2.8.1.tgz", { "bin": { "yaml": "bin.mjs" } }, "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw=="], + + "yargs": ["yargs@17.7.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yargs/-/yargs-17.7.2.tgz", { "dependencies": { "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" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yargs-parser/-/yargs-parser-21.1.1.tgz", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yauzl": ["yauzl@2.10.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yauzl/-/yauzl-2.10.0.tgz", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], + + "yn": ["yn@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yn/-/yn-3.1.1.tgz", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], + + "yocto-queue": ["yocto-queue@0.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], + + "yoga-wasm-web": ["yoga-wasm-web@0.3.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz", {}, "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA=="], + + "zod": ["zod@4.1.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/zod/-/zod-4.1.13.tgz", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="], + + "@abapify/adt-codegen/commander": ["commander@11.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/commander/-/commander-11.1.0.tgz", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + + "@abapify/adt-codegen/fast-xml-parser": ["fast-xml-parser@4.5.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", { "dependencies": { "strnum": "^1.1.1" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig=="], + + "@abapify/asjson-parser/@nx/rollup": ["@nx/rollup@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/rollup/-/rollup-21.5.1.tgz", { "dependencies": { "@nx/devkit": "21.5.1", "@nx/js": "21.5.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", "picocolors": "^1.1.0", "picomatch": "4.0.2", "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" } }, "sha512-nZiqjErGyiMn06+k5GdB9g8ryJOrLc4gsRqEvJSVkUUa9xCl7uR7qCuKJ5eJ47j/zENGMw7YDFMZyCqtzbVDFw=="], + + "@alcalzone/ansi-tokenize/is-fullwidth-code-point": ["is-fullwidth-code-point@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", {}, "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="], + + "@asamuzakjp/css-color/lru-cache": ["lru-cache@10.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lru-cache/-/lru-cache-10.4.3.tgz", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "@babel/core/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@babel/core/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lru-cache/-/lru-cache-5.1.1.tgz", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-create-regexp-features-plugin/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/plugin-transform-runtime/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/preset-env/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], + + "@cypress/request/form-data": ["form-data@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/form-data/-/form-data-4.0.0.tgz", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/config-array/minimatch": ["minimatch@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "@eslint/eslintrc/ajv": ["ajv@6.12.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ajv/-/ajv-6.12.6.tgz", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "@eslint/eslintrc/globals": ["globals@14.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/globals/-/globals-14.0.0.tgz", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "@eslint/eslintrc/minimatch": ["minimatch@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "@eslint/eslintrc/strip-json-comments": ["strip-json-comments@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/signal-exit/-/signal-exit-4.1.0.tgz", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-6.2.0.tgz", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + + "@inquirer/external-editor/iconv-lite": ["iconv-lite@0.7.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/iconv-lite/-/iconv-lite-0.7.0.tgz", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ=="], + + "@isaacs/cliui/string-width": ["string-width@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-width/-/string-width-5.1.2.tgz", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.2.tgz", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-8.1.0.tgz", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "@istanbuljs/load-nyc-config/camelcase": ["camelcase@5.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/camelcase/-/camelcase-5.3.1.tgz", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + + "@istanbuljs/load-nyc-config/find-up": ["find-up@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/find-up/-/find-up-4.1.0.tgz", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-yaml/-/js-yaml-3.14.1.tgz", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], + + "@istanbuljs/load-nyc-config/resolve-from": ["resolve-from@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve-from/-/resolve-from-5.0.0.tgz", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "@jest/console/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jest/console/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/console/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "@jest/core/@jest/console": ["@jest/console@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/console/-/console-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.0.5", "jest-util": "30.0.5", "slash": "^3.0.0" } }, "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA=="], + + "@jest/core/@jest/reporters": ["@jest/reporters@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/reporters/-/reporters-30.0.5.tgz", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "30.0.5", "@jest/test-result": "30.0.5", "@jest/transform": "30.0.5", "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", "jest-message-util": "30.0.5", "jest-util": "30.0.5", "jest-worker": "30.0.5", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g=="], + + "@jest/core/@jest/test-result": ["@jest/test-result@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-result/-/test-result-30.0.5.tgz", { "dependencies": { "@jest/console": "30.0.5", "@jest/types": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ=="], + + "@jest/core/@jest/transform": ["@jest/transform@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/transform/-/transform-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.0", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg=="], + + "@jest/core/ansi-escapes": ["ansi-escapes@4.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + + "@jest/core/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/core/jest-config": ["jest-config@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-config/-/jest-config-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.0.1", "@jest/pattern": "30.0.1", "@jest/test-sequencer": "30.0.5", "@jest/types": "30.0.5", "babel-jest": "30.0.5", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-circus": "30.0.5", "jest-docblock": "30.0.1", "jest-environment-node": "30.0.5", "jest-regex-util": "30.0.1", "jest-resolve": "30.0.5", "jest-runner": "30.0.5", "jest-util": "30.0.5", "jest-validate": "30.0.5", "micromatch": "^4.0.8", "parse-json": "^5.2.0", "pretty-format": "30.0.5", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "esbuild-register", "ts-node"] }, "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA=="], + + "@jest/core/jest-haste-map": ["jest-haste-map@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "jest-worker": "30.0.5", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg=="], + + "@jest/core/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "@jest/core/jest-resolve": ["jest-resolve@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-resolve/-/jest-resolve-30.0.5.tgz", { "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.0.5", "jest-validate": "30.0.5", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" } }, "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg=="], + + "@jest/core/jest-runner": ["jest-runner@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-runner/-/jest-runner-30.0.5.tgz", { "dependencies": { "@jest/console": "30.0.5", "@jest/environment": "30.0.5", "@jest/test-result": "30.0.5", "@jest/transform": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.0.1", "jest-environment-node": "30.0.5", "jest-haste-map": "30.0.5", "jest-leak-detector": "30.0.5", "jest-message-util": "30.0.5", "jest-resolve": "30.0.5", "jest-runtime": "30.0.5", "jest-util": "30.0.5", "jest-watcher": "30.0.5", "jest-worker": "30.0.5", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw=="], + + "@jest/core/jest-validate": ["jest-validate@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-validate/-/jest-validate-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "@jest/types": "30.0.5", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.0.5" } }, "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw=="], + + "@jest/core/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "@jest/create-cache-key-function/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jest/environment/@jest/fake-timers": ["@jest/fake-timers@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/fake-timers/-/fake-timers-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw=="], + + "@jest/environment/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "@jest/environment-jsdom-abstract/@jest/fake-timers": ["@jest/fake-timers@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/fake-timers/-/fake-timers-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw=="], + + "@jest/environment-jsdom-abstract/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "@jest/expect/jest-snapshot": ["jest-snapshot@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-snapshot/-/jest-snapshot-30.2.0.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "@jest/snapshot-utils": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", "expect": "30.2.0", "graceful-fs": "^4.2.11", "jest-diff": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" } }, "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA=="], + + "@jest/fake-timers/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jest/fake-timers/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "@jest/globals/@jest/expect": ["@jest/expect@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect/-/expect-30.0.5.tgz", { "dependencies": { "expect": "30.0.5", "jest-snapshot": "30.0.5" } }, "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA=="], + + "@jest/globals/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "@jest/reporters/@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], + + "@jest/reporters/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jest/reporters/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/reporters/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "@jest/snapshot-utils/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/test-result/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jest/transform/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jest/transform/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/transform/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "@jest/types/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@nx/eslint/typescript": ["typescript@5.9.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/typescript/-/typescript-5.9.2.tgz", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], + + "@nx/eslint-plugin/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@nx/jest/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "@nx/js/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@nx/workspace/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@oxc-resolver/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], + + "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], + + "@rollup/plugin-commonjs/glob": ["glob@8.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/glob/-/glob-8.1.0.tgz", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], + + "@rollup/pluginutils/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@sap/cds-foss/big.js": ["big.js@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/big.js/-/big.js-6.2.2.tgz", {}, "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ=="], + + "@sap/xsenv/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@swc-node/sourcemap-support/source-map-support": ["source-map-support@0.5.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map-support/-/source-map-support-0.5.21.tgz", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "@swc/cli/commander": ["commander@8.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/commander/-/commander-8.3.0.tgz", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + + "@ts-morph/common/minimatch": ["minimatch@10.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-10.1.1.tgz", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], + + "@types/minimatch/minimatch": ["minimatch@9.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@types/serve-static/@types/send": ["@types/send@0.17.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@types/send/-/send-0.17.6.tgz", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0" } }, "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "@typescript-eslint/typescript-estree": "8.43.0", "@typescript-eslint/utils": "8.43.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/utils/-/utils-8.43.0.tgz", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.43.0", "@typescript-eslint/types": "8.43.0", "@typescript-eslint/typescript-estree": "8.43.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ignore/-/ignore-7.0.5.tgz", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + + "@verdaccio/auth/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/commons-api/http-status-codes": ["http-status-codes@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/http-status-codes/-/http-status-codes-2.2.0.tgz", {}, "sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng=="], + + "@verdaccio/config/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/config/js-yaml": ["js-yaml@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-yaml/-/js-yaml-4.1.0.tgz", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "@verdaccio/config/minimatch": ["minimatch@7.4.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-7.4.6.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw=="], + + "@verdaccio/core/process-warning": ["process-warning@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/process-warning/-/process-warning-1.0.0.tgz", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@verdaccio/core/semver": ["semver@7.7.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-7.7.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + + "@verdaccio/loaders/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/local-storage-legacy/async": ["async@3.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/async/-/async-3.2.4.tgz", {}, "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="], + + "@verdaccio/local-storage-legacy/debug": ["debug@4.3.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.3.4.tgz", { "dependencies": { "ms": "2.1.2" } }, "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="], + + "@verdaccio/logger/pino": ["pino@9.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pino/-/pino-9.6.0.tgz", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg=="], + + "@verdaccio/logger-commons/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/middleware/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/middleware/mime": ["mime@2.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mime/-/mime-2.6.0.tgz", { "bin": { "mime": "cli.js" } }, "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="], + + "@verdaccio/signature/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/tarball/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/tarball/tar-stream": ["tar-stream@3.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tar-stream/-/tar-stream-3.1.7.tgz", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + + "@verdaccio/url/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@verdaccio/utils/minimatch": ["minimatch@7.4.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-7.4.6.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw=="], + + "@verdaccio/utils/semver": ["semver@7.7.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-7.7.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + + "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/estree-walker/-/estree-walker-3.0.3.tgz", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "@xhmikosr/decompress-tar/tar-stream": ["tar-stream@3.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tar-stream/-/tar-stream-3.1.7.tgz", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + + "@xhmikosr/decompress-unzip/yauzl": ["yauzl@3.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yauzl/-/yauzl-3.2.0.tgz", { "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" } }, "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w=="], + + "@xhmikosr/downloader/defaults": ["defaults@2.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/defaults/-/defaults-2.0.2.tgz", {}, "sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA=="], + + "@yarnpkg/parsers/js-yaml": ["js-yaml@3.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-yaml/-/js-yaml-3.14.1.tgz", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], + + "accepts/negotiator": ["negotiator@0.6.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/negotiator/-/negotiator-0.6.3.tgz", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-2.3.1.tgz", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "ast-v8-to-istanbul/estree-walker": ["estree-walker@3.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/estree-walker/-/estree-walker-3.0.3.tgz", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "ast-v8-to-istanbul/js-tokens": ["js-tokens@9.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-tokens/-/js-tokens-9.0.1.tgz", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "babel-jest/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "babel-plugin-istanbul/test-exclude": ["test-exclude@6.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/test-exclude/-/test-exclude-6.0.0.tgz", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + + "babel-plugin-macros/cosmiconfig": ["cosmiconfig@7.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cosmiconfig/-/cosmiconfig-7.1.0.tgz", { "dependencies": { "@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" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="], + + "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "basic-auth/safe-buffer": ["safe-buffer@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "bl/buffer": ["buffer@5.7.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/buffer/-/buffer-5.7.1.tgz", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "bl/readable-stream": ["readable-stream@3.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/readable-stream/-/readable-stream-3.6.2.tgz", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "body-parser/debug": ["debug@2.6.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "body-parser/qs": ["qs@6.13.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/qs/-/qs-6.13.0.tgz", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], + + "cacheable-request/normalize-url": ["normalize-url@8.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/normalize-url/-/normalize-url-8.1.0.tgz", {}, "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w=="], + + "chromium-bidi/zod": ["zod@3.25.76", "https://jfrog.booking.com:443/artifactory/api/npm/npm/zod/-/zod-3.25.76.tgz", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "cli-truncate/slice-ansi": ["slice-ansi@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/slice-ansi/-/slice-ansi-5.0.0.tgz", { "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ=="], + + "cli-truncate/string-width": ["string-width@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-width/-/string-width-7.2.0.tgz", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "compression/debug": ["debug@2.6.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "concat-with-sourcemaps/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "css-tree/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "cssnano/yaml": ["yaml@1.10.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yaml/-/yaml-1.10.2.tgz", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="], + + "decompress-response/mimic-response": ["mimic-response@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mimic-response/-/mimic-response-3.1.0.tgz", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + + "defaults/clone": ["clone@1.0.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/clone/-/clone-1.0.4.tgz", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + + "dom-serializer/entities": ["entities@2.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/entities/-/entities-2.2.0.tgz", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + + "duplexify/readable-stream": ["readable-stream@2.3.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/readable-stream/-/readable-stream-2.3.8.tgz", { "dependencies": { "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" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "escodegen/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "eslint/ajv": ["ajv@6.12.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ajv/-/ajv-6.12.6.tgz", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "eslint/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "eslint/minimatch": ["minimatch@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "eslint-import-resolver-node/debug": ["debug@3.2.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-3.2.7.tgz", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-module-utils/debug": ["debug@3.2.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-3.2.7.tgz", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-plugin-import/debug": ["debug@3.2.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-3.2.7.tgz", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-plugin-import/minimatch": ["minimatch@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "eslint-plugin-import/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + + "expect/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "express/debug": ["debug@2.6.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "express/qs": ["qs@6.13.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/qs/-/qs-6.13.0.tgz", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], + + "extract-zip/get-stream": ["get-stream@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/get-stream/-/get-stream-5.2.0.tgz", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/glob-parent/-/glob-parent-5.1.2.tgz", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "filelist/minimatch": ["minimatch@5.1.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-5.1.6.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "finalhandler/debug": ["debug@2.6.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "find-cache-dir/make-dir": ["make-dir@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/make-dir/-/make-dir-3.1.0.tgz", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], + + "foreground-child/signal-exit": ["signal-exit@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/signal-exit/-/signal-exit-4.1.0.tgz", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "front-matter/js-yaml": ["js-yaml@3.14.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-yaml/-/js-yaml-3.14.1.tgz", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], + + "generic-names/loader-utils": ["loader-utils@3.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/loader-utils/-/loader-utils-3.3.1.tgz", {}, "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg=="], + + "glob/minimatch": ["minimatch@9.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "globby/glob": ["glob@7.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/glob/-/glob-7.2.3.tgz", { "dependencies": { "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" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "handlebars/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "hosted-git-info/lru-cache": ["lru-cache@10.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lru-cache/-/lru-cache-10.4.3.tgz", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "html-encoding-sniffer/whatwg-encoding": ["whatwg-encoding@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg=="], + + "http-server/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "http-server/mime": ["mime@1.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mime/-/mime-1.6.0.tgz", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + + "import-from/resolve-from": ["resolve-from@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve-from/-/resolve-from-5.0.0.tgz", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "ink/cli-cursor": ["cli-cursor@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cli-cursor/-/cli-cursor-4.0.0.tgz", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="], + + "ink/string-width": ["string-width@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-width/-/string-width-7.2.0.tgz", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "ink-select-input/figures": ["figures@6.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/figures/-/figures-6.1.0.tgz", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], + + "ink-spinner/cli-spinners": ["cli-spinners@2.9.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/cli-spinners/-/cli-spinners-2.9.2.tgz", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + + "is-inside-container/is-docker": ["is-docker@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-docker/-/is-docker-3.0.0.tgz", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + + "jest-circus/@jest/environment": ["@jest/environment@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/environment/-/environment-30.2.0.tgz", { "dependencies": { "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0" } }, "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g=="], + + "jest-circus/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-circus/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-circus/jest-runtime": ["jest-runtime@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-runtime/-/jest-runtime-30.2.0.tgz", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/globals": "30.2.0", "@jest/source-map": "30.0.1", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg=="], + + "jest-circus/jest-snapshot": ["jest-snapshot@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-snapshot/-/jest-snapshot-30.2.0.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "@jest/snapshot-utils": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", "expect": "30.2.0", "graceful-fs": "^4.2.11", "jest-diff": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" } }, "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA=="], + + "jest-circus/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-cli/@jest/test-result": ["@jest/test-result@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-result/-/test-result-30.0.5.tgz", { "dependencies": { "@jest/console": "30.0.5", "@jest/types": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ=="], + + "jest-cli/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-cli/jest-config": ["jest-config@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-config/-/jest-config-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.0.1", "@jest/pattern": "30.0.1", "@jest/test-sequencer": "30.0.5", "@jest/types": "30.0.5", "babel-jest": "30.0.5", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-circus": "30.0.5", "jest-docblock": "30.0.1", "jest-environment-node": "30.0.5", "jest-regex-util": "30.0.1", "jest-resolve": "30.0.5", "jest-runner": "30.0.5", "jest-util": "30.0.5", "jest-validate": "30.0.5", "micromatch": "^4.0.8", "parse-json": "^5.2.0", "pretty-format": "30.0.5", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "esbuild-register", "ts-node"] }, "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA=="], + + "jest-cli/jest-validate": ["jest-validate@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-validate/-/jest-validate-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "@jest/types": "30.0.5", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.0.5" } }, "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw=="], + + "jest-config/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-config/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-config/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-config/strip-json-comments": ["strip-json-comments@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "jest-diff/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-each/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-each/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-each/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-environment-node/@jest/environment": ["@jest/environment@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/environment/-/environment-30.2.0.tgz", { "dependencies": { "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0" } }, "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g=="], + + "jest-environment-node/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-environment-node/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-haste-map/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-haste-map/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-matcher-utils/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-message-util/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-message-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-mock/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-mock/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-resolve/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-resolve/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-runner/@jest/environment": ["@jest/environment@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/environment/-/environment-30.2.0.tgz", { "dependencies": { "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0" } }, "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g=="], + + "jest-runner/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-runner/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-runner/jest-runtime": ["jest-runtime@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-runtime/-/jest-runtime-30.2.0.tgz", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/globals": "30.2.0", "@jest/source-map": "30.0.1", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg=="], + + "jest-runner/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-runner/jest-watcher": ["jest-watcher@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-watcher/-/jest-watcher-30.2.0.tgz", { "dependencies": { "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", "jest-util": "30.2.0", "string-length": "^4.0.2" } }, "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg=="], + + "jest-runner/source-map-support": ["source-map-support@0.5.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map-support/-/source-map-support-0.5.13.tgz", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="], + + "jest-runtime/@jest/fake-timers": ["@jest/fake-timers@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/fake-timers/-/fake-timers-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw=="], + + "jest-runtime/@jest/test-result": ["@jest/test-result@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-result/-/test-result-30.0.5.tgz", { "dependencies": { "@jest/console": "30.0.5", "@jest/types": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ=="], + + "jest-runtime/@jest/transform": ["@jest/transform@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/transform/-/transform-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.0", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg=="], + + "jest-runtime/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-runtime/jest-haste-map": ["jest-haste-map@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "jest-worker": "30.0.5", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg=="], + + "jest-runtime/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "jest-runtime/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "jest-runtime/jest-resolve": ["jest-resolve@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-resolve/-/jest-resolve-30.0.5.tgz", { "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.0.5", "jest-validate": "30.0.5", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" } }, "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg=="], + + "jest-runtime/strip-bom": ["strip-bom@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-bom/-/strip-bom-4.0.0.tgz", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], + + "jest-snapshot/@jest/expect-utils": ["@jest/expect-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect-utils/-/expect-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1" } }, "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew=="], + + "jest-snapshot/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "jest-snapshot/@jest/transform": ["@jest/transform@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/transform/-/transform-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.0", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg=="], + + "jest-snapshot/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-snapshot/expect": ["expect@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/expect/-/expect-30.0.5.tgz", { "dependencies": { "@jest/expect-utils": "30.0.5", "@jest/get-type": "30.0.1", "jest-matcher-utils": "30.0.5", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ=="], + + "jest-snapshot/jest-diff": ["jest-diff@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-diff/-/jest-diff-30.0.5.tgz", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "pretty-format": "30.0.5" } }, "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A=="], + + "jest-snapshot/jest-matcher-utils": ["jest-matcher-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "jest-diff": "30.0.5", "pretty-format": "30.0.5" } }, "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ=="], + + "jest-snapshot/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "jest-snapshot/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-validate/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-validate/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-watcher/@jest/test-result": ["@jest/test-result@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-result/-/test-result-30.0.5.tgz", { "dependencies": { "@jest/console": "30.0.5", "@jest/types": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ=="], + + "jest-watcher/ansi-escapes": ["ansi-escapes@4.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + + "jest-watcher/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-worker/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jsdom/html-encoding-sniffer": ["html-encoding-sniffer@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", { "dependencies": { "whatwg-encoding": "^3.1.1" } }, "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ=="], + + "jsonc-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "jsonc-eslint-parser/espree": ["espree@9.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/espree/-/espree-9.6.1.tgz", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], + + "jsprim/extsprintf": ["extsprintf@1.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/extsprintf/-/extsprintf-1.3.0.tgz", {}, "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="], + + "jsprim/verror": ["verror@1.10.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/verror/-/verror-1.10.0.tgz", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw=="], + + "knip/jiti": ["jiti@2.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jiti/-/jiti-2.6.1.tgz", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "knip/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "log-symbols/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "log-symbols/is-unicode-supported": ["is-unicode-supported@0.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + + "lowdb/pify": ["pify@3.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pify/-/pify-3.0.0.tgz", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-2.3.1.tgz", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/whatwg-url/-/whatwg-url-5.0.0.tgz", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "nx/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "nx/ignore": ["ignore@7.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ignore/-/ignore-7.0.5.tgz", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "nx/open": ["open@8.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/open/-/open-8.4.2.tgz", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + + "ora/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "parse-json/lines-and-columns": ["lines-and-columns@1.2.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "path-scurry/lru-cache": ["lru-cache@10.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/lru-cache/-/lru-cache-10.4.3.tgz", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "pino-pretty/strip-json-comments": ["strip-json-comments@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "pkg-dir/find-up": ["find-up@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/find-up/-/find-up-4.1.0.tgz", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "playwright/fsevents": ["fsevents@2.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fsevents/-/fsevents-2.3.2.tgz", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], + + "postcss-calc/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-load-config/yaml": ["yaml@1.10.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yaml/-/yaml-1.10.2.tgz", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="], + + "postcss-merge-rules/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-minify-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-unique-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "prebuild-install/tar-fs": ["tar-fs@2.1.4", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tar-fs/-/tar-fs-2.1.4.tgz", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="], + + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "pumpify/pump": ["pump@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pump/-/pump-2.0.1.tgz", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA=="], + + "rc/strip-json-comments": ["strip-json-comments@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-2.0.1.tgz", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + + "resolve-cwd/resolve-from": ["resolve-from@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/resolve-from/-/resolve-from-5.0.0.tgz", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "rollup-plugin-copy/colorette": ["colorette@1.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/colorette/-/colorette-1.4.0.tgz", {}, "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="], + + "rollup-plugin-postcss/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "rollup-plugin-typescript2/@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], + + "rollup-plugin-typescript2/fs-extra": ["fs-extra@10.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/fs-extra/-/fs-extra-10.1.0.tgz", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + + "rollup-pluginutils/estree-walker": ["estree-walker@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/estree-walker/-/estree-walker-0.6.1.tgz", {}, "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="], + + "seek-bzip/commander": ["commander@6.2.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/commander/-/commander-6.2.1.tgz", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + + "send/debug": ["debug@2.6.9", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "send/encodeurl": ["encodeurl@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/encodeurl/-/encodeurl-1.0.2.tgz", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + + "send/mime": ["mime@1.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/mime/-/mime-1.6.0.tgz", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + + "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], + + "source-map-support/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], + + "strip-literal/js-tokens": ["js-tokens@9.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/js-tokens/-/js-tokens-9.0.1.tgz", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + + "stylehacks/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "svgo/commander": ["commander@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/commander/-/commander-7.2.0.tgz", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "tar-fs/tar-stream": ["tar-stream@3.1.7", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tar-stream/-/tar-stream-3.1.7.tgz", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + + "tar-stream/readable-stream": ["readable-stream@3.6.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/readable-stream/-/readable-stream-3.6.2.tgz", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "tcp-port-used/debug": ["debug@4.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.3.1.tgz", { "dependencies": { "ms": "2.1.2" } }, "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ=="], + + "terser/commander": ["commander@2.20.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/commander/-/commander-2.20.3.tgz", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "terser/source-map-support": ["source-map-support@0.5.21", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map-support/-/source-map-support-0.5.21.tgz", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "terser-webpack-plugin/jest-worker": ["jest-worker@27.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-27.5.1.tgz", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], + + "test-exclude/minimatch": ["minimatch@9.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "through2/readable-stream": ["readable-stream@2.3.8", "https://jfrog.booking.com:443/artifactory/api/npm/npm/readable-stream/-/readable-stream-2.3.8.tgz", { "dependencies": { "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" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "tinyglobby/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "tsdown/diff": ["diff@8.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/diff/-/diff-8.0.2.tgz", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], + + "typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/parser/-/parser-8.43.0.tgz", { "dependencies": { "@typescript-eslint/scope-manager": "8.43.0", "@typescript-eslint/types": "8.43.0", "@typescript-eslint/typescript-estree": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", { "dependencies": { "@typescript-eslint/project-service": "8.43.0", "@typescript-eslint/tsconfig-utils": "8.43.0", "@typescript-eslint/types": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0", "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.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw=="], + + "typescript-eslint/@typescript-eslint/utils": ["@typescript-eslint/utils@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/utils/-/utils-8.43.0.tgz", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.43.0", "@typescript-eslint/types": "8.43.0", "@typescript-eslint/typescript-estree": "8.43.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g=="], + + "unbzip2-stream/buffer": ["buffer@5.7.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/buffer/-/buffer-5.7.1.tgz", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "verdaccio/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "verdaccio/semver": ["semver@7.6.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-7.6.3.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="], + + "verdaccio-audit/https-proxy-agent": ["https-proxy-agent@5.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + + "verdaccio-htpasswd/@verdaccio/file-locking": ["@verdaccio/file-locking@13.0.0-next-8.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@verdaccio/file-locking/-/file-locking-13.0.0-next-8.3.tgz", { "dependencies": { "lockfile": "1.0.4" } }, "sha512-Sugx6XYp8nEJ9SmBoEOExEIQQ0T0q8fcyc/afWdiSNDGWviqqSx2IriCvtMwKZrE4XG0BQo6bXO+A8AOOoo7KQ=="], + + "verdaccio-htpasswd/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "vite/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "vitest/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "vitest/tinyexec": ["tinyexec@0.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tinyexec/-/tinyexec-0.3.2.tgz", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "webpack/eslint-scope": ["eslint-scope@5.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/eslint-scope/-/eslint-scope-5.1.1.tgz", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], + + "whatwg-encoding/iconv-lite": ["iconv-lite@0.6.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/iconv-lite/-/iconv-lite-0.6.3.tgz", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "widest-line/string-width": ["string-width@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-width/-/string-width-7.2.0.tgz", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "wrap-ansi/string-width": ["string-width@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string-width/-/string-width-7.2.0.tgz", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@7.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.2.tgz", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "write-file-atomic/signal-exit": ["signal-exit@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/signal-exit/-/signal-exit-4.1.0.tgz", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "wsl-utils/is-wsl": ["is-wsl@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-wsl/-/is-wsl-3.1.0.tgz", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], + + "@abapify/adt-codegen/fast-xml-parser/strnum": ["strnum@1.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strnum/-/strnum-1.1.2.tgz", {}, "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/devkit": ["@nx/devkit@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/devkit/-/devkit-21.5.1.tgz", { "dependencies": { "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" }, "peerDependencies": { "nx": ">= 20 <= 22" } }, "sha512-eVFFLMUcxO/holHdWo0YabyUs6H3wNvnovt/0LddIRGoiMHWpbFZLB/KThiyUWvuFVuqqyDzRmS0XRo/M2kOqQ=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js": ["@nx/js@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/js/-/js-21.5.1.tgz", { "dependencies": { "@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": "21.5.1", "@nx/workspace": "21.5.1", "@zkochan/js-yaml": "0.0.7", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^3.1.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", "npm-package-arg": "11.0.1", "npm-run-path": "^4.0.1", "ora": "5.3.0", "picocolors": "^1.1.0", "picomatch": "4.0.2", "semver": "^7.5.3", "source-map-support": "0.5.19", "tinyglobby": "^0.2.12", "tslib": "^2.3.0" }, "peerDependencies": { "verdaccio": "^6.0.5" }, "optionalPeers": ["verdaccio"] }, "sha512-1bmmIztTZvsZ8g5c1Vg1OHcpdJfUbmbANJAWAEmKw22X8Bdwhzi4Vfg8oYtTn1YvFpePV7GRxaFsG7sLI0VrYw=="], + + "@eslint/config-array/minimatch/brace-expansion": ["brace-expansion@1.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.12.tgz", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "@eslint/eslintrc/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.12.tgz", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-9.2.2.tgz", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.2.2.tgz", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "@istanbuljs/load-nyc-config/find-up/locate-path": ["locate-path@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/locate-path/-/locate-path-5.0.0.tgz", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + + "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/argparse/-/argparse-1.0.10.tgz", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + + "@jest/console/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/console/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@jest/core/@jest/reporters/@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], + + "@jest/core/@jest/reporters/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "@jest/core/ansi-escapes/type-fest": ["type-fest@0.21.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/type-fest/-/type-fest-0.21.3.tgz", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + + "@jest/core/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/core/jest-config/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "@jest/core/jest-config/@jest/test-sequencer": ["@jest/test-sequencer@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", { "dependencies": { "@jest/test-result": "30.0.5", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "slash": "^3.0.0" } }, "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ=="], + + "@jest/core/jest-config/babel-jest": ["babel-jest@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-jest/-/babel-jest-30.0.5.tgz", { "dependencies": { "@jest/transform": "30.0.5", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.0", "babel-preset-jest": "30.0.1", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0" } }, "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg=="], + + "@jest/core/jest-config/jest-circus": ["jest-circus@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-circus/-/jest-circus-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/expect": "30.0.5", "@jest/test-result": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", "jest-each": "30.0.5", "jest-matcher-utils": "30.0.5", "jest-message-util": "30.0.5", "jest-runtime": "30.0.5", "jest-snapshot": "30.0.5", "jest-util": "30.0.5", "p-limit": "^3.1.0", "pretty-format": "30.0.5", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug=="], + + "@jest/core/jest-config/jest-docblock": ["jest-docblock@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-docblock/-/jest-docblock-30.0.1.tgz", { "dependencies": { "detect-newline": "^3.1.0" } }, "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA=="], + + "@jest/core/jest-config/jest-environment-node": ["jest-environment-node@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-environment-node/-/jest-environment-node-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/fake-timers": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "jest-mock": "30.0.5", "jest-util": "30.0.5", "jest-validate": "30.0.5" } }, "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA=="], + + "@jest/core/jest-config/strip-json-comments": ["strip-json-comments@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "@jest/core/jest-haste-map/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "@jest/core/jest-runner/jest-docblock": ["jest-docblock@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-docblock/-/jest-docblock-30.0.1.tgz", { "dependencies": { "detect-newline": "^3.1.0" } }, "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA=="], + + "@jest/core/jest-runner/jest-environment-node": ["jest-environment-node@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-environment-node/-/jest-environment-node-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/fake-timers": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "jest-mock": "30.0.5", "jest-util": "30.0.5", "jest-validate": "30.0.5" } }, "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA=="], + + "@jest/core/jest-runner/jest-leak-detector": ["jest-leak-detector@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "pretty-format": "30.0.5" } }, "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg=="], + + "@jest/core/jest-runner/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "@jest/core/jest-runner/source-map-support": ["source-map-support@0.5.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map-support/-/source-map-support-0.5.13.tgz", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="], + + "@jest/core/jest-validate/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "@jest/core/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "@jest/create-cache-key-function/@jest/types/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/environment-jsdom-abstract/@jest/fake-timers/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "@jest/environment/@jest/fake-timers/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "@jest/expect/jest-snapshot/@jest/snapshot-utils": ["@jest/snapshot-utils@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" } }, "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug=="], + + "@jest/expect/jest-snapshot/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jest/expect/jest-snapshot/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/expect/jest-snapshot/jest-util": ["jest-util@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-util/-/jest-util-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "@jest/fake-timers/@jest/types/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/fake-timers/jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/fake-timers/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@jest/globals/@jest/expect/expect": ["expect@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/expect/-/expect-30.0.5.tgz", { "dependencies": { "@jest/expect-utils": "30.0.5", "@jest/get-type": "30.0.1", "jest-matcher-utils": "30.0.5", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ=="], + + "@jest/reporters/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/reporters/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@jest/snapshot-utils/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/test-result/@jest/types/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/transform/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/transform/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@nx/eslint-plugin/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@nx/jest/jest-util/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@nx/jest/jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@nx/jest/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@nx/js/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@nx/workspace/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@oxc-resolver/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@rollup/plugin-commonjs/glob/minimatch": ["minimatch@5.1.6", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-5.1.6.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "@swc-node/sourcemap-support/source-map-support/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.43.0.tgz", {}, "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/types": ["@typescript-eslint/types@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.43.0.tgz", {}, "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", { "dependencies": { "@typescript-eslint/project-service": "8.43.0", "@typescript-eslint/tsconfig-utils": "8.43.0", "@typescript-eslint/types": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0", "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.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.43.0.tgz", {}, "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", { "dependencies": { "@typescript-eslint/project-service": "8.43.0", "@typescript-eslint/tsconfig-utils": "8.43.0", "@typescript-eslint/types": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0", "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.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.43.0.tgz", {}, "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw=="], + + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@verdaccio/local-storage-legacy/debug/ms": ["ms@2.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.1.2.tgz", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], + + "@verdaccio/logger/pino/pino-abstract-transport": ["pino-abstract-transport@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], + + "@verdaccio/logger/pino/pino-std-serializers": ["pino-std-serializers@7.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], + + "@verdaccio/logger/pino/process-warning": ["process-warning@4.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/process-warning/-/process-warning-4.0.1.tgz", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + + "@verdaccio/logger/pino/sonic-boom": ["sonic-boom@4.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/sonic-boom/-/sonic-boom-4.2.0.tgz", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], + + "@verdaccio/logger/pino/thread-stream": ["thread-stream@3.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/thread-stream/-/thread-stream-3.1.0.tgz", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], + + "@yarnpkg/parsers/js-yaml/argparse": ["argparse@1.0.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/argparse/-/argparse-1.0.10.tgz", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + + "babel-jest/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "babel-plugin-istanbul/test-exclude/glob": ["glob@7.2.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/glob/-/glob-7.2.3.tgz", { "dependencies": { "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" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "babel-plugin-istanbul/test-exclude/minimatch": ["minimatch@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "babel-plugin-macros/cosmiconfig/yaml": ["yaml@1.10.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/yaml/-/yaml-1.10.2.tgz", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="], + + "body-parser/debug/ms": ["ms@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "cli-truncate/slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", {}, "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="], + + "cli-truncate/string-width/emoji-regex": ["emoji-regex@10.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-10.6.0.tgz", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "cli-truncate/string-width/strip-ansi": ["strip-ansi@7.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.2.tgz", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "compression/debug/ms": ["ms@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "duplexify/readable-stream/isarray": ["isarray@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/isarray/-/isarray-1.0.0.tgz", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "duplexify/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "duplexify/readable-stream/string_decoder": ["string_decoder@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string_decoder/-/string_decoder-1.1.1.tgz", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "eslint-plugin-import/minimatch/brace-expansion": ["brace-expansion@1.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.12.tgz", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json5/-/json5-1.0.2.tgz", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + + "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "eslint/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "eslint/minimatch/brace-expansion": ["brace-expansion@1.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.12.tgz", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "expect/jest-util/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "expect/jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "expect/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "express/debug/ms": ["ms@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "finalhandler/debug/ms": ["ms@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "find-cache-dir/make-dir/semver": ["semver@6.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "front-matter/js-yaml/argparse": ["argparse@1.0.10", "https://jfrog.booking.com:443/artifactory/api/npm/npm/argparse/-/argparse-1.0.10.tgz", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + + "globby/glob/minimatch": ["minimatch@3.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "html-encoding-sniffer/whatwg-encoding/iconv-lite": ["iconv-lite@0.6.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/iconv-lite/-/iconv-lite-0.6.3.tgz", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "http-server/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "ink/cli-cursor/restore-cursor": ["restore-cursor@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/restore-cursor/-/restore-cursor-4.0.0.tgz", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], + + "ink/string-width/emoji-regex": ["emoji-regex@10.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-10.6.0.tgz", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "ink/string-width/strip-ansi": ["strip-ansi@7.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.2.tgz", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "jest-circus/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-circus/jest-runtime/@jest/globals": ["@jest/globals@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/globals/-/globals-30.2.0.tgz", { "dependencies": { "@jest/environment": "30.2.0", "@jest/expect": "30.2.0", "@jest/types": "30.2.0", "jest-mock": "30.2.0" } }, "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw=="], + + "jest-circus/jest-runtime/strip-bom": ["strip-bom@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-bom/-/strip-bom-4.0.0.tgz", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], + + "jest-circus/jest-snapshot/@jest/snapshot-utils": ["@jest/snapshot-utils@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" } }, "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug=="], + + "jest-circus/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-cli/@jest/test-result/@jest/console": ["@jest/console@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/console/-/console-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.0.5", "jest-util": "30.0.5", "slash": "^3.0.0" } }, "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA=="], + + "jest-cli/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-cli/jest-config/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "jest-cli/jest-config/@jest/test-sequencer": ["@jest/test-sequencer@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", { "dependencies": { "@jest/test-result": "30.0.5", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "slash": "^3.0.0" } }, "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ=="], + + "jest-cli/jest-config/babel-jest": ["babel-jest@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-jest/-/babel-jest-30.0.5.tgz", { "dependencies": { "@jest/transform": "30.0.5", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.0", "babel-preset-jest": "30.0.1", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0" } }, "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg=="], + + "jest-cli/jest-config/jest-circus": ["jest-circus@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-circus/-/jest-circus-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/expect": "30.0.5", "@jest/test-result": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", "jest-each": "30.0.5", "jest-matcher-utils": "30.0.5", "jest-message-util": "30.0.5", "jest-runtime": "30.0.5", "jest-snapshot": "30.0.5", "jest-util": "30.0.5", "p-limit": "^3.1.0", "pretty-format": "30.0.5", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug=="], + + "jest-cli/jest-config/jest-docblock": ["jest-docblock@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-docblock/-/jest-docblock-30.0.1.tgz", { "dependencies": { "detect-newline": "^3.1.0" } }, "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA=="], + + "jest-cli/jest-config/jest-environment-node": ["jest-environment-node@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-environment-node/-/jest-environment-node-30.0.5.tgz", { "dependencies": { "@jest/environment": "30.0.5", "@jest/fake-timers": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "jest-mock": "30.0.5", "jest-util": "30.0.5", "jest-validate": "30.0.5" } }, "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA=="], + + "jest-cli/jest-config/jest-resolve": ["jest-resolve@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-resolve/-/jest-resolve-30.0.5.tgz", { "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.0.5", "jest-validate": "30.0.5", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" } }, "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg=="], + + "jest-cli/jest-config/jest-runner": ["jest-runner@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-runner/-/jest-runner-30.0.5.tgz", { "dependencies": { "@jest/console": "30.0.5", "@jest/environment": "30.0.5", "@jest/test-result": "30.0.5", "@jest/transform": "30.0.5", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.0.1", "jest-environment-node": "30.0.5", "jest-haste-map": "30.0.5", "jest-leak-detector": "30.0.5", "jest-message-util": "30.0.5", "jest-resolve": "30.0.5", "jest-runtime": "30.0.5", "jest-util": "30.0.5", "jest-watcher": "30.0.5", "jest-worker": "30.0.5", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw=="], + + "jest-cli/jest-config/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "jest-cli/jest-config/strip-json-comments": ["strip-json-comments@3.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "jest-cli/jest-validate/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "jest-cli/jest-validate/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "jest-config/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-config/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-diff/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-each/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-each/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-environment-node/@jest/types/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-environment-node/jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-environment-node/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-haste-map/@jest/types/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-haste-map/jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-haste-map/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-matcher-utils/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-mock/@jest/types/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-mock/jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-mock/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-resolve/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-resolve/jest-util/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-resolve/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-runner/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-runner/jest-runtime/@jest/globals": ["@jest/globals@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/globals/-/globals-30.2.0.tgz", { "dependencies": { "@jest/environment": "30.2.0", "@jest/expect": "30.2.0", "@jest/types": "30.2.0", "jest-mock": "30.2.0" } }, "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw=="], + + "jest-runner/jest-runtime/jest-snapshot": ["jest-snapshot@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-snapshot/-/jest-snapshot-30.2.0.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "@jest/snapshot-utils": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", "expect": "30.2.0", "graceful-fs": "^4.2.11", "jest-diff": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" } }, "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA=="], + + "jest-runner/jest-runtime/strip-bom": ["strip-bom@4.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-bom/-/strip-bom-4.0.0.tgz", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], + + "jest-runner/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jest-runner/jest-watcher/ansi-escapes": ["ansi-escapes@4.3.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + + "jest-runner/source-map-support/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "jest-runtime/@jest/test-result/@jest/console": ["@jest/console@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/console/-/console-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.0.5", "jest-util": "30.0.5", "slash": "^3.0.0" } }, "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA=="], + + "jest-runtime/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-runtime/jest-haste-map/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "jest-runtime/jest-message-util/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "jest-runtime/jest-resolve/jest-validate": ["jest-validate@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-validate/-/jest-validate-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "@jest/types": "30.0.5", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.0.5" } }, "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw=="], + + "jest-snapshot/@jest/transform/jest-haste-map": ["jest-haste-map@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "jest-worker": "30.0.5", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg=="], + + "jest-snapshot/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-snapshot/expect/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "jest-snapshot/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-validate/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-watcher/@jest/test-result/@jest/console": ["@jest/console@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/console/-/console-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.0.5", "jest-util": "30.0.5", "slash": "^3.0.0" } }, "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA=="], + + "jest-watcher/ansi-escapes/type-fest": ["type-fest@0.21.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/type-fest/-/type-fest-0.21.3.tgz", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + + "jest-watcher/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-worker/jest-util/@jest/types": ["@jest/types@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/types/-/types-30.2.0.tgz", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "jest-worker/jest-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-worker/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "jsprim/verror/extsprintf": ["extsprintf@1.4.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/extsprintf/-/extsprintf-1.4.1.tgz", {}, "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA=="], + + "log-symbols/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/tr46/-/tr46-0.0.3.tgz", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/webidl-conversions/-/webidl-conversions-3.0.1.tgz", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "nx/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "nx/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "ora/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "pkg-dir/find-up/locate-path": ["locate-path@5.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/locate-path/-/locate-path-5.0.0.tgz", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + + "rollup-plugin-postcss/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "rollup-plugin-typescript2/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-2.3.1.tgz", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "rollup-plugin-typescript2/fs-extra/jsonfile": ["jsonfile@6.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jsonfile/-/jsonfile-6.2.0.tgz", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + + "rollup-plugin-typescript2/fs-extra/universalify": ["universalify@2.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/universalify/-/universalify-2.0.1.tgz", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "send/debug/ms": ["ms@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "tcp-port-used/debug/ms": ["ms@2.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ms/-/ms-2.1.2.tgz", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], + + "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "terser/source-map-support/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "through2/readable-stream/isarray": ["isarray@1.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/isarray/-/isarray-1.0.0.tgz", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "through2/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "through2/readable-stream/string_decoder": ["string_decoder@1.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/string_decoder/-/string_decoder-1.1.1.tgz", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0" } }, "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg=="], + + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.43.0.tgz", {}, "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw=="], + + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.43.0", "@typescript-eslint/types": "^8.43.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.43.0.tgz", {}, "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0" } }, "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg=="], + + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.43.0.tgz", {}, "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw=="], + + "verdaccio-audit/https-proxy-agent/agent-base": ["agent-base@6.0.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/agent-base/-/agent-base-6.0.2.tgz", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "verdaccio-audit/https-proxy-agent/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "webpack/eslint-scope/estraverse": ["estraverse@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/estraverse/-/estraverse-4.3.0.tgz", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], + + "widest-line/string-width/emoji-regex": ["emoji-regex@10.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-10.6.0.tgz", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "widest-line/string-width/strip-ansi": ["strip-ansi@7.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.2.tgz", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-10.6.0.tgz", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.2.2.tgz", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace": ["@nx/workspace@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/workspace/-/workspace-21.5.1.tgz", { "dependencies": { "@nx/devkit": "21.5.1", "@zkochan/js-yaml": "0.0.7", "chalk": "^4.1.0", "enquirer": "~2.3.6", "nx": "21.5.1", "picomatch": "4.0.2", "semver": "^7.6.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } }, "sha512-Z3iuXaq2D5h6R8KInw5+EwX+pjuvrmSEhAYEtFWXrrRX/HQ3mnSRJQi8y2izLxv5yaTN6l/ufQ0NnDzPRLGpJg=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-locate/-/p-locate-4.1.0.tgz", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + + "@jest/core/@jest/reporters/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "@jest/core/jest-config/babel-jest/babel-preset-jest": ["babel-preset-jest@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", { "dependencies": { "babel-plugin-jest-hoist": "30.0.1", "babel-preset-current-node-syntax": "^1.1.0" }, "peerDependencies": { "@babel/core": "^7.11.0" } }, "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw=="], + + "@jest/core/jest-config/jest-circus/@jest/expect": ["@jest/expect@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect/-/expect-30.0.5.tgz", { "dependencies": { "expect": "30.0.5", "jest-snapshot": "30.0.5" } }, "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA=="], + + "@jest/core/jest-config/jest-circus/jest-each": ["jest-each@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-each/-/jest-each-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "@jest/types": "30.0.5", "chalk": "^4.1.2", "jest-util": "30.0.5", "pretty-format": "30.0.5" } }, "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ=="], + + "@jest/core/jest-config/jest-circus/jest-matcher-utils": ["jest-matcher-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "jest-diff": "30.0.5", "pretty-format": "30.0.5" } }, "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ=="], + + "@jest/core/jest-config/jest-environment-node/@jest/fake-timers": ["@jest/fake-timers@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/fake-timers/-/fake-timers-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw=="], + + "@jest/core/jest-config/jest-environment-node/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "@jest/core/jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "@jest/core/jest-runner/jest-environment-node/@jest/fake-timers": ["@jest/fake-timers@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/fake-timers/-/fake-timers-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw=="], + + "@jest/core/jest-runner/jest-environment-node/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "@jest/core/jest-runner/jest-leak-detector/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "@jest/core/jest-runner/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "@jest/core/jest-runner/source-map-support/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "@jest/create-cache-key-function/@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/environment-jsdom-abstract/@jest/fake-timers/jest-message-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/environment-jsdom-abstract/@jest/fake-timers/jest-message-util/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "@jest/environment/@jest/fake-timers/jest-message-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/environment/@jest/fake-timers/jest-message-util/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "@jest/expect/jest-snapshot/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/expect/jest-snapshot/jest-util/picomatch": ["picomatch@4.0.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.3.tgz", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@jest/fake-timers/@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/fake-timers/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/globals/@jest/expect/expect/@jest/expect-utils": ["@jest/expect-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect-utils/-/expect-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1" } }, "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew=="], + + "@jest/globals/@jest/expect/expect/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "@jest/globals/@jest/expect/expect/jest-matcher-utils": ["jest-matcher-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "jest-diff": "30.0.5", "pretty-format": "30.0.5" } }, "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ=="], + + "@jest/globals/@jest/expect/expect/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "@jest/test-result/@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@nx/jest/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.43.0", "@typescript-eslint/types": "^8.43.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.43.0", "@typescript-eslint/types": "^8.43.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/debug": ["debug@4.4.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "babel-plugin-istanbul/test-exclude/minimatch/brace-expansion": ["brace-expansion@1.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.12.tgz", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.2.2.tgz", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "expect/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "globby/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "https://jfrog.booking.com:443/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.12.tgz", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "ink/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.2.2.tgz", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "jest-cli/@jest/test-result/@jest/console/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "jest-cli/jest-config/@jest/test-sequencer/jest-haste-map": ["jest-haste-map@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "jest-worker": "30.0.5", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg=="], + + "jest-cli/jest-config/babel-jest/@jest/transform": ["@jest/transform@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/transform/-/transform-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.0", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg=="], + + "jest-cli/jest-config/babel-jest/babel-preset-jest": ["babel-preset-jest@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", { "dependencies": { "babel-plugin-jest-hoist": "30.0.1", "babel-preset-current-node-syntax": "^1.1.0" }, "peerDependencies": { "@babel/core": "^7.11.0" } }, "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw=="], + + "jest-cli/jest-config/jest-circus/@jest/expect": ["@jest/expect@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect/-/expect-30.0.5.tgz", { "dependencies": { "expect": "30.0.5", "jest-snapshot": "30.0.5" } }, "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA=="], + + "jest-cli/jest-config/jest-circus/jest-each": ["jest-each@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-each/-/jest-each-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "@jest/types": "30.0.5", "chalk": "^4.1.2", "jest-util": "30.0.5", "pretty-format": "30.0.5" } }, "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ=="], + + "jest-cli/jest-config/jest-circus/jest-matcher-utils": ["jest-matcher-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "jest-diff": "30.0.5", "pretty-format": "30.0.5" } }, "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ=="], + + "jest-cli/jest-config/jest-circus/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "jest-cli/jest-config/jest-environment-node/@jest/fake-timers": ["@jest/fake-timers@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/fake-timers/-/fake-timers-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw=="], + + "jest-cli/jest-config/jest-environment-node/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "jest-cli/jest-config/jest-resolve/jest-haste-map": ["jest-haste-map@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "jest-worker": "30.0.5", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg=="], + + "jest-cli/jest-config/jest-runner/@jest/console": ["@jest/console@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/console/-/console-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.0.5", "jest-util": "30.0.5", "slash": "^3.0.0" } }, "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA=="], + + "jest-cli/jest-config/jest-runner/@jest/transform": ["@jest/transform@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/transform/-/transform-30.0.5.tgz", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.0", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.5", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg=="], + + "jest-cli/jest-config/jest-runner/jest-haste-map": ["jest-haste-map@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "jest-worker": "30.0.5", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg=="], + + "jest-cli/jest-config/jest-runner/jest-leak-detector": ["jest-leak-detector@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1", "pretty-format": "30.0.5" } }, "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg=="], + + "jest-cli/jest-config/jest-runner/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "jest-cli/jest-config/jest-runner/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "jest-cli/jest-config/jest-runner/source-map-support": ["source-map-support@0.5.13", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map-support/-/source-map-support-0.5.13.tgz", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="], + + "jest-cli/jest-config/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "jest-cli/jest-validate/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "jest-environment-node/@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-environment-node/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-haste-map/@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-haste-map/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-mock/@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-mock/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-runner/jest-runtime/jest-snapshot/@jest/snapshot-utils": ["@jest/snapshot-utils@30.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", { "dependencies": { "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" } }, "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug=="], + + "jest-runner/jest-watcher/ansi-escapes/type-fest": ["type-fest@0.21.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/type-fest/-/type-fest-0.21.3.tgz", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + + "jest-runtime/jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-runtime/jest-message-util/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "jest-runtime/jest-resolve/jest-validate/@jest/get-type": ["@jest/get-type@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/get-type/-/get-type-30.0.1.tgz", {}, "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw=="], + + "jest-runtime/jest-resolve/jest-validate/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "jest-snapshot/@jest/transform/jest-haste-map/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "jest-watcher/@jest/test-result/@jest/console/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "jest-worker/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-worker/jest-util/chalk/supports-color": ["supports-color@7.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-7.2.0.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "pkg-dir/find-up/locate-path/p-locate": ["p-locate@4.1.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-locate/-/p-locate-4.1.0.tgz", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.43.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", { "dependencies": { "@typescript-eslint/types": "8.43.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw=="], + + "verdaccio-audit/https-proxy-agent/agent-base/debug": ["debug@4.4.3", "https://jfrog.booking.com:443/artifactory/api/npm/npm/debug/-/debug-4.4.3.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.2.2.tgz", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx": ["nx@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/nx/-/nx-21.5.1.tgz", { "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.2", "@zkochan/js-yaml": "0.0.7", "axios": "^1.8.3", "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": "^30.0.2", "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", "tree-kill": "^1.2.2", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", "yaml": "^2.6.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "21.5.1", "@nx/nx-darwin-x64": "21.5.1", "@nx/nx-freebsd-x64": "21.5.1", "@nx/nx-linux-arm-gnueabihf": "21.5.1", "@nx/nx-linux-arm64-gnu": "21.5.1", "@nx/nx-linux-arm64-musl": "21.5.1", "@nx/nx-linux-x64-gnu": "21.5.1", "@nx/nx-linux-x64-musl": "21.5.1", "@nx/nx-win32-arm64-msvc": "21.5.1", "@nx/nx-win32-x64-msvc": "21.5.1" }, "peerDependencies": { "@swc-node/register": "^1.8.0", "@swc/core": "^1.3.85" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "bin/nx.js", "nx-cloud": "bin/nx-cloud.js" } }, "sha512-DnWUrqMy2pNzPR6DYRVXZwiMyXrjJhUKEdEW0dGFUuHYYS7fOCfqSwj91Zr7LsAQ70WLOOY3z3+UAcQY4Dkr/A=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-limit/-/p-limit-2.3.0.tgz", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + + "@jest/core/jest-config/babel-jest/babel-preset-jest/babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "@types/babel__core": "^7.20.5" } }, "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ=="], + + "@jest/core/jest-config/jest-circus/@jest/expect/expect": ["expect@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/expect/-/expect-30.0.5.tgz", { "dependencies": { "@jest/expect-utils": "30.0.5", "@jest/get-type": "30.0.1", "jest-matcher-utils": "30.0.5", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ=="], + + "@jest/core/jest-config/jest-circus/jest-matcher-utils/jest-diff": ["jest-diff@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-diff/-/jest-diff-30.0.5.tgz", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "pretty-format": "30.0.5" } }, "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A=="], + + "@jest/environment-jsdom-abstract/@jest/fake-timers/jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/environment-jsdom-abstract/@jest/fake-timers/jest-message-util/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "@jest/environment/@jest/fake-timers/jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/environment/@jest/fake-timers/jest-message-util/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "@jest/globals/@jest/expect/expect/jest-matcher-utils/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/globals/@jest/expect/expect/jest-matcher-utils/jest-diff": ["jest-diff@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-diff/-/jest-diff-30.0.5.tgz", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "pretty-format": "30.0.5" } }, "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A=="], + + "@jest/globals/@jest/expect/expect/jest-matcher-utils/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "@jest/globals/@jest/expect/expect/jest-message-util/chalk": ["chalk@4.1.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/globals/@jest/expect/expect/jest-message-util/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "jest-cli/@jest/test-result/@jest/console/jest-message-util/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "jest-cli/jest-config/@jest/test-sequencer/jest-haste-map/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "jest-cli/jest-config/babel-jest/@jest/transform/jest-haste-map": ["jest-haste-map@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-haste-map/-/jest-haste-map-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "jest-worker": "30.0.5", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg=="], + + "jest-cli/jest-config/babel-jest/babel-preset-jest/babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@30.0.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "@types/babel__core": "^7.20.5" } }, "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ=="], + + "jest-cli/jest-config/jest-circus/@jest/expect/expect": ["expect@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/expect/-/expect-30.0.5.tgz", { "dependencies": { "@jest/expect-utils": "30.0.5", "@jest/get-type": "30.0.1", "jest-matcher-utils": "30.0.5", "jest-message-util": "30.0.5", "jest-mock": "30.0.5", "jest-util": "30.0.5" } }, "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ=="], + + "jest-cli/jest-config/jest-circus/jest-matcher-utils/jest-diff": ["jest-diff@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-diff/-/jest-diff-30.0.5.tgz", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.0.1", "chalk": "^4.1.2", "pretty-format": "30.0.5" } }, "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A=="], + + "jest-cli/jest-config/jest-environment-node/@jest/fake-timers/jest-message-util": ["jest-message-util@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-30.0.5.tgz", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.5", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA=="], + + "jest-cli/jest-config/jest-resolve/jest-haste-map/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "jest-cli/jest-config/jest-runner/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-cli/jest-config/jest-runner/source-map-support/source-map": ["source-map@0.6.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "jest-runtime/jest-resolve/jest-validate/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "jest-snapshot/@jest/transform/jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-watcher/@jest/test-result/@jest/console/jest-message-util/pretty-format": ["pretty-format@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/pretty-format/-/pretty-format-30.0.5.tgz", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw=="], + + "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/p-limit/-/p-limit-2.3.0.tgz", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-darwin-arm64": ["@nx/nx-darwin-arm64@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.5.1.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-IygLfkQ9IlLG6UVlIdycGhXcK2uJynPwlQu6PcbprCc7iR7Y9QS62EJTDaIWoSIndyTZOL0vzTsucaGrTbW0iQ=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-darwin-x64": ["@nx/nx-darwin-x64@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-darwin-x64/-/nx-darwin-x64-21.5.1.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-TuCv71+SSFkhvBtzK38m4zX5L2IssVN1pv7qYgQt/mu6GSShLowPnciIfd+1rLZ669Rnq6Nw19y6pLtrvrM6pg=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-freebsd-x64": ["@nx/nx-freebsd-x64@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.5.1.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-degNAUzVQvgbGHbaXhuVS9I7EgeClQ3tkUUXw40eiO/q6GQx8DeVzIFM40dD2qHmWXGX4UVrF0u0QvkdOreapA=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-linux-arm-gnueabihf": ["@nx/nx-linux-arm-gnueabihf@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.5.1.tgz", { "os": "linux", "cpu": "arm" }, "sha512-t/EFYOdFs9uzWHjhU+QfmBOcbPpx1/svT5G5Xy+kRt+lxSISQSe7ysEypfJPCBr5m71sV4ZEOdVAuMnf5sak2g=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-linux-arm64-gnu": ["@nx/nx-linux-arm64-gnu@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.5.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-OubBjD8BN11nEjrHCno5EOXs6iUOgvfStsqQ/90sN8856PTh1uM86tklUi68Xx8dgMAc2nUrFqqlOL2KYT8t/w=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-linux-arm64-musl": ["@nx/nx-linux-arm64-musl@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.5.1.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-11mPv4uW/IqgIH3p2QHt7GZd3hrAE3MDJNZvo1Zj0O7o4ukWh/G7GHEQzAqYe4qdm91TOHNCkKJihSf8Ha3DBg=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-linux-x64-gnu": ["@nx/nx-linux-x64-gnu@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.5.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-b0eN0bZAq4qIa849CO1gjpvAM14safR8e7l0nMFUcB0llNGyA3C8SStQ03nw6+HuXwzEhIWVnHrJhvJPmPZ8KQ=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-linux-x64-musl": ["@nx/nx-linux-x64-musl@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.5.1.tgz", { "os": "linux", "cpu": "x64" }, "sha512-DjMtLCDLhJgAoFaEme8/+5jENd11k6cddYXzs04zd0GG+5TggQHLo9LwtkuYf8BFi1v8XrpYLo0V647YLncAXg=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-win32-arm64-msvc": ["@nx/nx-win32-arm64-msvc@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.5.1.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-H15phBFnx33GTJnuJom3lnjb18tt/87E26mZuJoxwIPdFVkCmUKiB5YP6rA7lIknzPD1mkCE1E6zFIjnIuNQyQ=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/@nx/nx-win32-x64-msvc": ["@nx/nx-win32-x64-msvc@21.5.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.5.1.tgz", { "os": "win32", "cpu": "x64" }, "sha512-bKw/CDrtRMm8J+IslPOdFaCaEeGaWWo6CSUqnlfM3hXaWYJMamsWfmbUfzipAcYCq2BJ8/IEcJ41K7ANpVdq1w=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/open": ["open@8.4.2", "https://jfrog.booking.com:443/artifactory/api/npm/npm/open/-/open-8.4.2.tgz", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + + "@jest/core/jest-config/jest-circus/@jest/expect/expect/@jest/expect-utils": ["@jest/expect-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect-utils/-/expect-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1" } }, "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew=="], + + "@jest/core/jest-config/jest-circus/@jest/expect/expect/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "@jest/globals/@jest/expect/expect/jest-matcher-utils/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/globals/@jest/expect/expect/jest-matcher-utils/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "@jest/globals/@jest/expect/expect/jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/globals/@jest/expect/expect/jest-message-util/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "jest-cli/@jest/test-result/@jest/console/jest-message-util/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "jest-cli/jest-config/@jest/test-sequencer/jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-cli/jest-config/babel-jest/@jest/transform/jest-haste-map/jest-worker": ["jest-worker@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-worker/-/jest-worker-30.0.5.tgz", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ=="], + + "jest-cli/jest-config/jest-circus/@jest/expect/expect/@jest/expect-utils": ["@jest/expect-utils@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/@jest/expect-utils/-/expect-utils-30.0.5.tgz", { "dependencies": { "@jest/get-type": "30.0.1" } }, "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew=="], + + "jest-cli/jest-config/jest-circus/@jest/expect/expect/jest-mock": ["jest-mock@30.0.5", "https://jfrog.booking.com:443/artifactory/api/npm/npm/jest-mock/-/jest-mock-30.0.5.tgz", { "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "jest-util": "30.0.5" } }, "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ=="], + + "jest-cli/jest-config/jest-resolve/jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-watcher/@jest/test-result/@jest/console/jest-message-util/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "@abapify/asjson-parser/@nx/rollup/@nx/js/@nx/workspace/nx/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "https://jfrog.booking.com:443/artifactory/api/npm/npm/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "jest-cli/jest-config/babel-jest/@jest/transform/jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "https://jfrog.booking.com:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + } +} diff --git a/docs/design/export-architecture.md b/docs/design/export-architecture.md index ae369f57..0c99dbe0 100644 --- a/docs/design/export-architecture.md +++ b/docs/design/export-architecture.md @@ -50,11 +50,11 @@ but this is wrong because: ### Separation of Concerns -| Layer | Responsibility | Does NOT do | -|-------|---------------|-------------| -| **CLI/Service** | Create FileTree, iterate generator, deploy objects | Parse file formats | -| **Plugin** | Map FileTree → ADK objects | Deploy to SAP | -| **ADK** | Object operations (save, activate) | Know about file formats | +| Layer | Responsibility | Does NOT do | +| --------------- | -------------------------------------------------- | ----------------------- | +| **CLI/Service** | Create FileTree, iterate generator, deploy objects | Parse file formats | +| **Plugin** | Map FileTree → ADK objects | Deploy to SAP | +| **ADK** | Object operations (save, activate) | Know about file formats | ### FileTree Abstraction @@ -64,16 +64,16 @@ Virtual file system interface - allows testing without real FS: interface FileTree { /** List files matching pattern (glob) */ glob(pattern: string): Promise; - + /** Read file contents */ read(path: string): Promise; - + /** Check if path exists */ exists(path: string): Promise; - + /** List directory contents */ readdir(path: string): Promise; - + /** Get file stats */ stat(path: string): Promise<{ isFile: boolean; isDirectory: boolean }>; } @@ -96,11 +96,15 @@ class MemoryFileTree implements FileTree { ```typescript interface AdtPlugin { // ... existing ... - + readonly format: { // Existing: SAP → Files (import) - import(object: AdkObject, targetPath: string, context: ImportContext): Promise; - + import( + object: AdkObject, + targetPath: string, + context: ImportContext, + ): Promise; + // NEW: Files → ADK Objects (export) - GENERATOR export?(fileTree: FileTree): AsyncGenerator; }; @@ -114,32 +118,32 @@ interface AdtPlugin { async exportTransport(options: TransportExportOptions): Promise { const plugin = await loadFormatPlugin(options.format); const fileTree = createFileTree(options.inputPath); - + const objects: AdkObject[] = []; - + // Plugin yields ADK objects - we just collect and deploy for await (const adkObject of plugin.format.export!(fileTree)) { // Filter by type if needed if (options.objectTypes && !options.objectTypes.includes(adkObject.type)) { continue; } - + // Save inactive if (!options.dryRun) { - await adkObject.save({ - inactive: true, - transport: options.transportNumber + await adkObject.save({ + inactive: true, + transport: options.transportNumber }); } - + objects.push(adkObject); } - + // Bulk activate all at once if (!options.dryRun && objects.length > 0) { await adk.activate(objects); } - + return { /* results */ }; } ``` @@ -152,15 +156,15 @@ async function* export(fileTree: FileTree): AsyncGenerator { // Plugin knows OAT format: *.oat.xml files for await (const file of fileTree.glob('**/*.oat.xml')) { const content = await fileTree.read(file); - + // Parse OAT XML → extract type, name, source, metadata const parsed = parseOatXml(content); - + // Create ADK object with data const adkObject = adk.get(parsed.name, parsed.type); adkObject.setSource(parsed.source); adkObject.setMetadata(parsed.metadata); - + yield adkObject; } } @@ -174,19 +178,19 @@ async function* export(fileTree: FileTree): AsyncGenerator { // Plugin knows abapGit format: .abap + .xml files // First scan to build object list const objects = await scanAbapGitStructure(fileTree); - + for (const obj of objects) { // Read source files (.abap) const source = await fileTree.read(obj.sourcePath); - + // Read metadata (.xml) const metadata = await fileTree.read(obj.metadataPath); - + // Create ADK object const adkObject = adk.get(obj.name, obj.type); adkObject.setSource(source); adkObject.setMetadata(parseAbapGitXml(metadata)); - + yield adkObject; } } @@ -229,6 +233,7 @@ async function* export(fileTree: FileTree): AsyncGenerator { ``` **Why separate package?** + - Export can modify SAP system - should be explicit opt-in - Users must consciously add to config - no accidental deployments - Clear separation of read-only vs write operations @@ -259,9 +264,7 @@ Add to `adt.config.ts`: ```typescript export default { - commands: [ - '@abapify/adt-export/commands/export', - ], + commands: ['@abapify/adt-export/commands/export'], }; ``` diff --git a/package.json b/package.json index bd2db7db..2135daf4 100644 --- a/package.json +++ b/package.json @@ -19,25 +19,14 @@ "packages/plugins/*" ], "scripts": { - "test": "nx run-many --target=test --exclude=${npm_package_name}", - "test:vitest": "vitest run --silent", - "test:vitest:verbose": "vitest run", "prepare": "husky", "precommit": "nx format:check --uncommitted", - "lint": "nx run-many --target=lint --fix --exclude=${npm_package_name}", "devcontainer": "devcontainer up --workspace-folder=$(pwd)", "preversion": "npx nx release version ${npm_new_version}", - "btp": "npx tsx e2e/btp-cli/cli.ts", - "btp:token": "npm run btp -- --file e2e/secrets/service_key.json", - "knip": "knip", - "deploy:examples": "npx adt export --source git_modules/abapgit-examples/src --format abapgit", - "deploy:examples:dry": "npx adt export --source git_modules/abapgit-examples/src --format abapgit --dry-run" + "knip": "knip" }, "dependencies": { - "@cloudfoundry/api": "^0.1.7", "@nx/devkit": "22.1.1", - "@sap/cds-dk": "^8.4.0", - "@sap/xsenv": "^5.4.0", "@xmldom/xmldom": "^0.9.5", "axios": "^1.7.7", "dset": "^3.1.4", @@ -53,7 +42,6 @@ "zod": "^4.1.13" }, "devDependencies": { - "@cap-js/cds-types": "^0.7.0", "@eslint/js": "^9.8.0", "@nx/eslint": "22.1.1", "@nx/eslint-plugin": "22.1.1", @@ -91,7 +79,7 @@ "knip": "^5.71.0", "nx": "22.1.1", "pino-pretty": "^10.3.1", - "prettier": "^2.6.2", + "prettier": "^3.7.4", "rollup": "^4.14.0", "swc-loader": "0.1.15", "ts-jest": "29.4.1", diff --git a/packages/adk/src/base/adt.ts b/packages/adk/src/base/adt.ts index a3c3c63a..87e8f4d1 100644 --- a/packages/adk/src/base/adt.ts +++ b/packages/adk/src/base/adt.ts @@ -1,14 +1,14 @@ /** * ADK v2 - ADT Integration Layer - * + * * Single integration point for adt-client. * All ADK objects import types from here, not directly from adt-client. - * + * * This provides: * 1. Single dependency point - only this file imports from adt-client * 2. Re-exported types - objects import from '../base/adt' * 3. Proxy contract - ADK-specific contract interface - * + * * Architecture: * ``` * adt-client (external) @@ -30,7 +30,7 @@ export type { AdtClient } from '@abapify/adt-client'; // Response types (inferred from contracts/schemas) // Note: Some response types are unions (e.g., ClassResponse = { abapClass } | { abapClassInclude }) // We re-export the full union and provide extracted types for ADK objects -export type { +export type { ClassResponse as ClassResponseUnion, InterfaceResponse as InterfaceResponseUnion, PackageResponse as PackageResponseUnion, @@ -50,7 +50,7 @@ export type { IncludesContract, } from '@abapify/adt-client'; -import type { +import type { ClassResponse as _ClassResponse, InterfaceResponse as _InterfaceResponse, PackageResponse as _PackageResponse, @@ -66,7 +66,10 @@ export type ClassResponse = Extract<_ClassResponse, { abapClass: unknown }>; /** * Extract the abapInterface variant from InterfaceResponse union */ -export type InterfaceResponse = Extract<_InterfaceResponse, { abapInterface: unknown }>; +export type InterfaceResponse = Extract< + _InterfaceResponse, + { abapInterface: unknown } +>; /** * Extract the package variant from PackageResponse union @@ -84,7 +87,7 @@ import type { AdtClient } from '@abapify/adt-client'; /** * ADT REST contracts accessible via client.adt.* - * + * * This is the typed contract layer from adt-client. * Example: client.adt.oo.classes.get('ZCL_MY_CLASS') */ @@ -92,7 +95,7 @@ export type AdtContracts = AdtClient['adt']; /** * ADK Contract interface - * + * * Proxy to adt-client contracts. * Provides typed access to ADT REST endpoints. */ @@ -111,7 +114,7 @@ export interface AdkContract { /** * Create ADK contract from ADT client - * + * * @param client - ADT client instance from createAdtClient() * @returns ADK contract proxy */ diff --git a/packages/adk/src/base/index.ts b/packages/adk/src/base/index.ts index adb1130c..019b3791 100644 --- a/packages/adk/src/base/index.ts +++ b/packages/adk/src/base/index.ts @@ -5,4 +5,9 @@ export * from './types'; export * from './context'; export * from './kinds'; -export { AdkObject, BaseModel, type LockHandle, type SaveOptions, type SaveMode } from './model'; +export { + AdkObject, + type LockHandle, + type SaveOptions, + type SaveMode, +} from './model'; diff --git a/packages/adk/src/base/model.ts b/packages/adk/src/base/model.ts index 76798c90..110e8d8e 100644 --- a/packages/adk/src/base/model.ts +++ b/packages/adk/src/base/model.ts @@ -1,13 +1,13 @@ /** * ADK v2 - Base Object - * + * * Abstract base class for all ADK objects. * Supports two construction patterns: * 1. Full data: new AdkObject(ctx, data) * 2. Deferred load: new AdkObject(ctx, 'OBJECT_NAME').load() - * + * * Provides lazy loading, caching, and automatic lock/unlock. - * + * * Hierarchy (mirrors XSD): * - AdkObject (AdtObject) - base with name, type, links, description, version, etc. * - AdkMainObject (AdtMainObject) - adds packageRef, responsible, masterLanguage @@ -82,7 +82,6 @@ export interface AdtObjectReference { packageName?: string; } - /** * Base data contract for all ADK objects * Matches XSD AdtObject type attributes and elements @@ -119,14 +118,14 @@ export interface AdkMainObjectData extends AdkObjectData { /** * Base class for all ADK objects - * + * * All ADK objects (AdkPackage, AdkTransportRequest, etc.) extend this. * Supports deferred loading - create with just a name, then call load(). - * + * * Note: Uses loose type constraint for D to allow schema-inferred types * from contracts which may have different shapes. The getters safely * handle missing properties with defaults. - * + * * @typeParam K - The object kind (from AdkKind) * @typeParam D - The internal data type (typically schema-inferred from contract) */ @@ -134,13 +133,13 @@ export interface AdkMainObjectData extends AdkObjectData { export abstract class AdkObject { /** Object kind identifier */ abstract readonly kind: K; - - /** + + /** * ADT object URI - base path for all operations. * Example: `/sap/bc/adt/oo/classes/zcl_my_class` */ abstract get objectUri(): string; - + /** * ADT collection URI - base path for creating new objects. * Example: `/sap/bc/adt/oo/classes` @@ -152,14 +151,14 @@ export abstract class AdkObject { const lastSlash = uri.lastIndexOf('/'); return lastSlash > 0 ? uri.substring(0, lastSlash) : uri; } - + protected readonly ctx: AdkContext; protected _data?: D; protected _name: string; protected cache = new Map(); protected dirty = new Set(); protected _lockHandle?: LockHandle; - + /** * Create ADK object * @param ctx - ADK context @@ -184,26 +183,30 @@ export abstract class AdkObject { /** * Load object data from SAP - * + * * Default implementation uses crudContract.get() and unwraps with wrapperKey. * Objects without crudContract must override this. - * + * * @returns this (for chaining) */ async load(): Promise { const contract = this.crudContract; const wrapperKey = this.wrapperKey; - + if (!contract || !wrapperKey) { - throw new Error(`Load not implemented for ${this.kind}. Override load() or provide crudContract/wrapperKey.`); + throw new Error( + `Load not implemented for ${this.kind}. Override load() or provide crudContract/wrapperKey.`, + ); } - + const response = await contract.get(this.name); - + if (!response || !(wrapperKey in response)) { - throw new Error(`${this.kind} '${this.name}' not found or returned empty response`); + throw new Error( + `${this.kind} '${this.name}' not found or returned empty response`, + ); } - + this.setData((response as Record)[wrapperKey] as D); return this; } @@ -213,7 +216,7 @@ export abstract class AdkObject { return !!this._data; } - /** + /** * Get data - auto-loads if not already loaded * @returns Promise that resolves to the data */ @@ -225,13 +228,15 @@ export abstract class AdkObject { return this._data as D; } - /** + /** * Get data synchronously - throws if not loaded * Use when you know data is already loaded */ get dataSync(): D { if (!this._data) { - throw new Error(`${this.kind} '${this._name}' not loaded. Call load() or use data() instead.`); + throw new Error( + `${this.kind} '${this._name}' not loaded. Call load() or use data() instead.`, + ); } return this._data; } @@ -242,7 +247,7 @@ export abstract class AdkObject { // Cast to access name property which may exist on schema-inferred types this._name = (data as AdkObjectData).name; } - + /** Helper to access data with AdkObjectData properties */ private get coreData(): AdkObjectData { return this.dataSync as unknown as AdkObjectData; @@ -253,174 +258,201 @@ export abstract class AdkObject { // ============================================ /** ADT object name (adtcore:name) - available even before load() */ - get name(): string { return this._name; } - + get name(): string { + return this._name; + } + /** ADT object type (adtcore:type, e.g. 'RQRQ', 'DEVC/K') - requires load() */ - get type(): string { return this.coreData.type; } - + get type(): string { + return this.coreData.type; + } + /** Description text (adtcore:description) */ - get description(): string { return this.coreData.description ?? ''; } - + get description(): string { + return this.coreData.description ?? ''; + } + /** Version state (adtcore:version) - active, inactive, etc. */ - get version(): string { return this.coreData.version ?? ''; } - + get version(): string { + return this.coreData.version ?? ''; + } + /** Current language (adtcore:language) */ - get language(): string { return this.coreData.language ?? ''; } - + get language(): string { + return this.coreData.language ?? ''; + } + /** User who last modified (adtcore:changedBy) */ - get changedBy(): string { return this.coreData.changedBy ?? ''; } - + get changedBy(): string { + return this.coreData.changedBy ?? ''; + } + /** Last modification timestamp (adtcore:changedAt) */ get changedAt(): Date { const val = this.coreData.changedAt; return val instanceof Date ? val : val ? new Date(val) : new Date(0); } - + /** User who created (adtcore:createdBy) */ - get createdBy(): string { return this.coreData.createdBy ?? ''; } - + get createdBy(): string { + return this.coreData.createdBy ?? ''; + } + /** Creation timestamp (adtcore:createdAt) */ get createdAt(): Date { const val = this.coreData.createdAt; return val instanceof Date ? val : val ? new Date(val) : new Date(0); } - + // ============================================ // Links (atom:link elements) // ============================================ - + /** All atom:link elements */ - get links(): AtomLink[] { return this.coreData.links ?? []; } - + get links(): AtomLink[] { + return this.coreData.links ?? []; + } + /** Find link by rel attribute */ getLink(rel: string): AtomLink | undefined { - return this.links.find(l => l.rel === rel); + return this.links.find((l) => l.rel === rel); } - + /** Get link href by rel, or undefined */ getLinkHref(rel: string): string | undefined { return this.getLink(rel)?.href; } - + /** Container reference (adtcore:containerRef) */ get containerRef(): AdtObjectReference | undefined { return this.coreData.containerRef; } - + // ============================================ // Lock State // ============================================ - + /** Check if object is currently locked */ - get isLocked(): boolean { return !!this._lockHandle; } - + get isLocked(): boolean { + return !!this._lockHandle; + } + /** Get current lock handle */ get lockHandle(): LockHandle | undefined { return this._lockHandle; } - - /** + + /** * Lock the object for modification - * + * * Uses the CRUD contract's lock() method. - * + * * The lock response contains: * - LOCK_HANDLE: Required for subsequent PUT/unlock operations * - CORRNR: Transport request assigned to this object (use for PUT if no explicit transport) * - CORRUSER: User who owns the transport - * + * * @param transport - Optional transport request to use for locking. * Required when object is already in a transport. */ async lock(transport?: string): Promise { if (this._lockHandle) return this._lockHandle; - + const contract = this.crudContract; if (!contract?.lock) { - throw new Error(`Lock not supported for ${this.kind}. Provide crudContract with lock() method.`); + throw new Error( + `Lock not supported for ${this.kind}. Provide crudContract with lock() method.`, + ); } - + // Use contract's lock method const response = await contract.lock(this.name, { corrNr: transport }); - + // Parse lock response XML // Response format: ...xxxyyy...... const responseText = String(response); this._lockHandle = this.parseLockResponse(responseText); return this._lockHandle; } - - /** + + /** * Unlock the object - * + * * Uses the CRUD contract's unlock() method. */ async unlock(): Promise { if (!this._lockHandle) return; - + const contract = this.crudContract; if (!contract?.unlock) { - throw new Error(`Unlock not supported for ${this.kind}. Provide crudContract with unlock() method.`); + throw new Error( + `Unlock not supported for ${this.kind}. Provide crudContract with unlock() method.`, + ); } - + // Use contract's unlock method await contract.unlock(this.name, { lockHandle: this._lockHandle.handle }); this._lockHandle = undefined; } - + /** * Parse lock response XML to extract lock handle and correlation info */ protected parseLockResponse(responseText: string): LockHandle { - const lockHandleMatch = responseText.match(/([^<]+)<\/LOCK_HANDLE>/); - + const lockHandleMatch = responseText.match( + /([^<]+)<\/LOCK_HANDLE>/, + ); + if (!lockHandleMatch) { - throw new Error(`Failed to parse lock handle from response: ${responseText.substring(0, 200)}`); + // Don't expose raw SAP response in error message for security + throw new Error( + 'Failed to parse lock handle from SAP response. The response format may have changed.', + ); } - + // Extract CORRNR (transport request) - this is the transport assigned to the object const corrNrMatch = responseText.match(/([^<]+)<\/CORRNR>/); const corrUserMatch = responseText.match(/([^<]+)<\/CORRUSER>/); - - return { + + return { handle: lockHandleMatch[1], correlationNumber: corrNrMatch?.[1], correlationUser: corrUserMatch?.[1], }; } - + /** * Set lock handle (for subclasses that need custom lock logic) */ protected setLockHandle(handle: LockHandle | undefined): void { this._lockHandle = handle; } - + // ============================================ // Save Operations // ============================================ - + /** * Save the object to SAP - * + * * Generic implementation that handles: * - Lock/unlock lifecycle * - Mode switching (create/update/upsert) * - Error handling - * + * * Subclasses implement `saveViaContract()` to provide the typed contract call. - * + * * Modes: * - 'update' (default): PUT to existing object * - 'create': POST to create new object * - 'upsert': Try PUT first, fall back to POST if 404 - * + * * @param options - Save options * @returns this (for chaining) */ async save(options: SaveOptions = {}): Promise { const { transport, mode = 'update' } = options; - + // Lock if not already locked (skip for create mode - object doesn't exist yet) const wasLocked = this.isLocked; const needsLock = mode !== 'create'; @@ -428,26 +460,27 @@ export abstract class AdkObject { try { await this.lock(transport); } catch (e) { - // For upsert, lock failure means object doesn't exist - switch to create - if (mode === 'upsert') { + // For upsert, only fallback to create if it's a 404 Not Found error + if (mode === 'upsert' && this.isNotFoundError(e)) { return this.save({ ...options, mode: 'create' }); } throw e; } } - + try { // Check if object has pending sources (from abapGit deserialization) // For existing objects with sources, save sources instead of metadata const hasPendingSources = this.hasPendingSources(); - + // Use transport from lock response if not explicitly provided // The lock response contains CORRNR which is the transport assigned to this object - const effectiveTransport = transport ?? this._lockHandle?.correlationNumber; - + const effectiveTransport = + transport ?? this._lockHandle?.correlationNumber; + if (hasPendingSources && mode !== 'create') { // Save sources only - skip metadata PUT which SAP often rejects - await this.savePendingSources({ + await this.savePendingSources({ lockHandle: this._lockHandle?.handle, transport: effectiveTransport, }); @@ -460,10 +493,10 @@ export abstract class AdkObject { lockHandle: this._lockHandle?.handle, }); } - + // Clear dirty flags this.dirty.clear(); - + return this; } catch (e: unknown) { // For upsert with PUT failure (404), try POST @@ -478,56 +511,60 @@ export abstract class AdkObject { } } } - + /** * Wrapper key for the data in contract requests/responses - * + * * Contracts wrap data like { abapClass: ... } or { abapInterface: ... }. * Subclasses that support save override this. */ protected get wrapperKey(): string | undefined { return undefined; } - + /** * CRUD contract for this object type - * + * * Subclasses that support save override this to return their contract. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any protected get crudContract(): any { return undefined; } - + /** * Execute the typed contract call for save - * + * * Generic implementation using wrapperKey and crudContract. * Objects that don't support save leave wrapperKey/crudContract undefined. - * + * * @param mode - 'create' (POST) or 'update' (PUT) * @param options - Contract options (transport, lockHandle) */ protected async saveViaContract( mode: 'create' | 'update', - options: { transport?: string; lockHandle?: string } + options: { transport?: string; lockHandle?: string }, ): Promise { const wrapperKey = this.wrapperKey; const contract = this.crudContract; - + if (!wrapperKey || !contract) { throw new Error(`Save not supported for ${this.kind}.`); } - + const data = { [wrapperKey]: await this.data() }; - + if (mode === 'create') { await contract.post({ corrNr: options.transport }, data); } else { - await contract.put(this.name, { corrNr: options.transport, lockHandle: options.lockHandle }, data); + await contract.put( + this.name, + { corrNr: options.transport, lockHandle: options.lockHandle }, + data, + ); } } - + /** * Check if error is a 404 Not Found */ @@ -537,34 +574,37 @@ export abstract class AdkObject { } return false; } - + /** * Check if object has pending sources to save * Subclasses with source code (classes, interfaces) override this */ protected hasPendingSources(): boolean { - const self = this as unknown as { + const self = this as unknown as { _pendingSources?: Record; _pendingSource?: string; }; return !!(self._pendingSources || self._pendingSource); } - + /** * Save pending sources * Subclasses with source code (classes, interfaces) override this * Default implementation does nothing */ - protected async savePendingSources(_options?: { lockHandle?: string; transport?: string }): Promise { + protected async savePendingSources(_options?: { + lockHandle?: string; + transport?: string; + }): Promise { // Default: no-op. Subclasses like AdkClass override this. } - + /** * Set source content for a source-based object - * + * * Generic implementation for objects with source code (classes, includes, etc.) * Subclasses should override if they need custom source handling. - * + * * @param sourcePath - Relative path to source (e.g., '/source/main') * @param content - Source code content * @param options - Save options @@ -572,16 +612,16 @@ export abstract class AdkObject { async setSource( sourcePath: string, content: string, - options: SaveOptions = {} + options: SaveOptions = {}, ): Promise { const { transport } = options; - + // Lock if not already locked const wasLocked = this.isLocked; if (!wasLocked) { await this.lock(); } - + try { // Build URL const params = new URLSearchParams(); @@ -591,12 +631,12 @@ export abstract class AdkObject { if (this._lockHandle) { params.set('lockHandle', this._lockHandle.handle); } - + const fullPath = `${this.objectUri}${sourcePath}`; - const url = params.toString() + const url = params.toString() ? `${fullPath}?${params.toString()}` : fullPath; - + // PUT source content await this.ctx.client.fetch(url, { method: 'PUT', @@ -612,13 +652,13 @@ export abstract class AdkObject { } } } - + /** * Activate this object - * + * * Activates a single object. For bulk activation of multiple objects, * use `AdkObjectSet.activateAll()`. - * + * * @returns this (for chaining) */ async activate(): Promise { @@ -632,18 +672,18 @@ export abstract class AdkObject { method: 'POST', headers: { 'Content-Type': 'application/xml', - 'Accept': 'application/xml', + Accept: 'application/xml', }, body: activationXml, }); - + return this; } - + // ============================================ // Caching Infrastructure // ============================================ - + /** Lazy load a segment (async) - fetches only once, then cached */ protected async lazy(key: string, loader: () => Promise): Promise { if (!this.cache.has(key)) { @@ -651,7 +691,7 @@ export abstract class AdkObject { } return this.cache.get(key) as T; } - + /** Lazy compute a segment (sync) - computes only once, then cached */ protected cached(key: string, compute: () => T): T { if (!this.cache.has(key)) { @@ -659,22 +699,22 @@ export abstract class AdkObject { } return this.cache.get(key) as T; } - + /** Set a cached value directly (for local/generated data) */ protected set(key: string, value: T): void { this.cache.set(key, value); } - + /** Mark a segment as dirty (modified locally) */ protected markDirty(key: string): void { this.dirty.add(key); } - + /** Check if any segment (or specific segment) is dirty */ isDirty(segment?: string): boolean { return segment ? this.dirty.has(segment) : this.dirty.size > 0; } - + /** Clear cache for a segment (force reload on next access) */ protected invalidate(key: string): void { this.cache.delete(key); @@ -682,63 +722,58 @@ export abstract class AdkObject { } } -// Re-export for backward compatibility (deprecated) -/** @deprecated Use AdkObject instead */ -export const BaseModel = AdkObject; - /** * Base class for main development objects (AdtMainObject) - * + * * Extends AdkObject with package reference, responsible user, and master language. * Used for repository objects like classes, interfaces, packages, etc. - * + * * Note: Uses type assertions internally because schema-inferred types from * contracts may have different shapes than AdkMainObjectData. The getters * safely handle missing properties with defaults. - * + * * @typeParam K - The object kind (from AdkKind) * @typeParam D - The internal data type (typically schema-inferred from contract) */ export abstract class AdkMainObject< - K extends AdkKind = AdkKind, + K extends AdkKind = AdkKind, // eslint-disable-next-line @typescript-eslint/no-explicit-any - D = any + D = any, > extends AdkObject { - // Helper to access data with main object properties private get mainData(): AdkMainObjectData { return this.dataSync as unknown as AdkMainObjectData; } - + // ============================================ // Main Object Properties (AdtMainObject additions) // ============================================ - + /** Package reference (adtcore:packageRef) */ get packageRef(): AdtObjectReference | undefined { return this.mainData.packageRef; } - + /** Package name (convenience getter) */ get package(): string { return this.mainData.packageRef?.name ?? ''; } - + /** Master system (adtcore:masterSystem) */ get masterSystem(): string { return this.mainData.masterSystem ?? ''; } - + /** Master language (adtcore:masterLanguage) */ get masterLanguage(): string { return this.mainData.masterLanguage ?? ''; } - + /** Responsible user (adtcore:responsible) */ get responsible(): string { return this.mainData.responsible ?? ''; } - + /** ABAP language version (adtcore:abapLanguageVersion) */ get abapLanguageVersion(): string { return this.mainData.abapLanguageVersion ?? ''; diff --git a/packages/adk/src/base/object-set.ts b/packages/adk/src/base/object-set.ts index 128af87e..57dcd3e0 100644 --- a/packages/adk/src/base/object-set.ts +++ b/packages/adk/src/base/object-set.ts @@ -1,17 +1,17 @@ /** * ADK Object Set - Bulk Operations Service - * + * * Provides a semantic layer for working with collections of ADK objects. * Supports bulk save, activate, and other batch operations. - * + * * @example * ```typescript * const set = new AdkObjectSet(ctx); - * + * * // Add objects from various sources * set.add(classObj); * set.addAll(interfaceObjects); - * + * * // Bulk operations * await set.saveAll({ transport: 'DEVK900001', inactive: true }); * await set.activateAll(); @@ -58,22 +58,22 @@ export interface BulkActivateOptions { /** * ADK Object Set - Collection of objects with bulk operations - * + * * A semantic layer for managing collections of ADK objects and * performing bulk operations like save and activate. */ export class AdkObjectSet { private readonly ctx: AdkContext; private readonly objects: AdkObject[] = []; - + constructor(ctx: AdkContext) { this.ctx = ctx; } - + // ============================================ // Collection Management // ============================================ - + /** * Add a single object to the set */ @@ -83,7 +83,7 @@ export class AdkObjectSet { } return this; } - + /** * Add multiple objects to the set */ @@ -93,7 +93,7 @@ export class AdkObjectSet { } return this; } - + /** * Remove an object from the set */ @@ -104,7 +104,7 @@ export class AdkObjectSet { } return this; } - + /** * Clear all objects from the set */ @@ -112,83 +112,83 @@ export class AdkObjectSet { this.objects.length = 0; return this; } - + /** * Get all objects in the set */ getAll(): AdkObject[] { return [...this.objects]; } - + /** * Get number of objects in the set */ get size(): number { return this.objects.length; } - + /** * Check if set is empty */ get isEmpty(): boolean { return this.objects.length === 0; } - + /** * Filter objects by type */ filterByType(type: string): AdkObject[] { - return this.objects.filter(obj => obj.type === type); + return this.objects.filter((obj) => obj.type === type); } - + /** * Filter objects by kind */ filterByKind(kind: string): AdkObject[] { - return this.objects.filter(obj => obj.kind === kind); + return this.objects.filter((obj) => obj.kind === kind); } - + /** * Iterate over objects */ [Symbol.iterator](): Iterator { return this.objects[Symbol.iterator](); } - + // ============================================ // Bulk Operations // ============================================ - + /** * Save all objects in the set - * + * * Saves each object individually, handling lock/unlock per object. * By default continues on error to save as many objects as possible. - * + * * @param options - Save options (transport, inactive, continueOnError) * @returns Result with success/failure counts and details */ async saveAll(options: BulkSaveOptions = {}): Promise { const { continueOnError = true, onProgress, ...saveOptions } = options; - + const result: BulkSaveResult = { success: 0, failed: 0, results: [], }; - + const total = this.objects.length; let saved = 0; - + for (const obj of this.objects) { try { - onProgress?.(saved, total, obj); - await obj.save(saveOptions); - + + saved++; + onProgress?.(saved, total, obj); + result.success++; result.results.push({ object: obj, success: true }); - saved++; } catch (error) { result.failed++; result.results.push({ @@ -196,39 +196,44 @@ export class AdkObjectSet { success: false, error: error instanceof Error ? error.message : String(error), }); - + if (!continueOnError) { break; } } } - + return result; } - + /** * Activate all objects in the set (bulk activation) - * + * * Uses SAP's bulk activation endpoint for efficiency. * All objects are activated in a single request. - * + * * @param options - Activation options * @returns Activation result with success/failure counts */ - async activateAll(options: BulkActivateOptions = {}): Promise { + async activateAll( + options: BulkActivateOptions = {}, + ): Promise { const { onProgress } = options; - + if (this.objects.length === 0) { return { success: 0, failed: 0, messages: [] }; } - + onProgress?.(`Activating ${this.objects.length} objects...`); - + // Build activation request XML - const objectRefs = this.objects.map(obj => - `` - ).join('\n '); - + const objectRefs = this.objects + .map( + (obj) => + ``, + ) + .join('\n '); + const activationXml = ` ${objectRefs} @@ -239,35 +244,35 @@ export class AdkObjectSet { method: 'POST', headers: { 'Content-Type': 'application/xml', - 'Accept': 'application/xml', + Accept: 'application/xml', }, body: activationXml, }); - - // TODO: Parse actual response XML for detailed messages - return { - success: this.objects.length, - failed: 0, + + // NOTE: Could parse actual response XML for detailed messages + return { + success: this.objects.length, + failed: 0, messages: [], response: String(response), }; } catch (error) { - return { - success: 0, - failed: this.objects.length, + return { + success: 0, + failed: this.objects.length, messages: [error instanceof Error ? error.message : String(error)], }; } } - + /** * Save all objects as inactive, then bulk activate, then unlock - * + * * This is the recommended pattern for deploying multiple objects: * 1. Save all objects as inactive (handles dependencies) * 2. Bulk activate all saved objects * 3. Unlock all objects - * + * * @param options - Save options (transport required) * @returns Combined result of save and activation */ @@ -276,17 +281,17 @@ export class AdkObjectSet { activation?: ActivationResult; }> { const { activate = true, ...saveOptions } = options; - + try { // Step 1: Save all as inactive const saveResult = await this.saveAll({ ...saveOptions, inactive: true, }); - + // Step 2: Bulk activate (only successfully saved objects) let activationResult: ActivationResult | undefined; - + if (activate && saveResult.success > 0) { // Create a temporary set with only saved objects for activation const savedSet = new AdkObjectSet(this.ctx); @@ -295,10 +300,10 @@ export class AdkObjectSet { savedSet.add(r.object); } } - + activationResult = await savedSet.activateAll(); } - + return { save: saveResult, activation: activationResult, @@ -308,23 +313,23 @@ export class AdkObjectSet { await this.unlockAll(); } } - + /** * Lock all objects in the set - * + * * @returns Array of lock handles */ async lockAll(): Promise { const handles: LockHandle[] = []; - + for (const obj of this.objects) { const handle = await obj.lock(); handles.push(handle); } - + return handles; } - + /** * Unlock all objects in the set */ @@ -333,31 +338,31 @@ export class AdkObjectSet { await obj.unlock(); } } - + /** * Load all objects (fetch data from SAP) - * + * * @param options - Load options * @returns This set (for chaining) */ async loadAll(options: { parallel?: boolean } = {}): Promise { const { parallel = false } = options; - + if (parallel) { - await Promise.all(this.objects.map(obj => obj.load())); + await Promise.all(this.objects.map((obj) => obj.load())); } else { for (const obj of this.objects) { await obj.load(); } } - + return this; } - + // ============================================ // Static Factory Methods // ============================================ - + /** * Create an object set from an array of objects */ @@ -366,13 +371,13 @@ export class AdkObjectSet { set.addAll(objects); return set; } - + /** * Create an object set by collecting from an async generator - * + * * Collects all objects yielded by the generator into the set. * Useful for collecting objects from format plugin export generators. - * + * * @param generator - Async generator yielding AdkObject instances * @param ctx - ADK context for the set * @param options - Collection options @@ -386,21 +391,21 @@ export class AdkObjectSet { filter?: (obj: AdkObject) => boolean; /** Callback for each object collected */ onObject?: (obj: AdkObject) => void; - } = {} + } = {}, ): Promise { const { filter, onObject } = options; const set = new AdkObjectSet(ctx); - + for await (const obj of generator) { // Apply filter if provided if (filter && !filter(obj)) { continue; } - + set.add(obj); onObject?.(obj); } - + return set; } } diff --git a/packages/adk/src/base/registry.ts b/packages/adk/src/base/registry.ts index 1bcf1368..5ae8b93d 100644 --- a/packages/adk/src/base/registry.ts +++ b/packages/adk/src/base/registry.ts @@ -1,9 +1,9 @@ /** * ADK Object Registry - * + * * Maps ADT types to ADK object constructors. * Supports both full types (DEVC/K) and main types (DEVC). - * + * * Architecture: * - ADT type (external): "DEVC/K", "CLAS/OC" - from SAP * - ADK kind (internal): Package, Class - our abstraction @@ -20,9 +20,10 @@ import * as kinds from './kinds'; // ============================================ /** Constructor signature for ADK objects */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type AdkObjectConstructor = AdkObject> = - new (ctx: AdkContext, nameOrData: string | any) => T; + +export type AdkObjectConstructor< + T extends AdkObject = AdkObject, +> = new (ctx: AdkContext, nameOrData: string | any) => T; /** Registry entry with constructor and kind */ export interface RegistryEntry { @@ -36,7 +37,7 @@ export interface RegistryEntry { /** * Parse ADT type into components - * + * * @example * parseAdtType("DEVC/K") // { full: "DEVC/K", main: "DEVC", sub: "K" } * parseAdtType("DEVC") // { full: "DEVC", main: "DEVC", sub: undefined } @@ -56,7 +57,7 @@ export function parseAdtType(adtType: string): { /** * Get main type from ADT type - * + * * @example * getMainType("DEVC/K") // "DEVC" * getMainType("CLAS") // "CLAS" @@ -80,7 +81,7 @@ const kindToAdt = new Map(); /** * Register an ADK object type - * + * * @param adtMainType - Main ADT type (e.g., "DEVC", "CLAS") * @param kind - ADK kind constant * @param constructor - Object constructor @@ -91,7 +92,7 @@ export function registerObjectType( constructor: AdkObjectConstructor, ): void { const normalizedType = adtMainType.toUpperCase(); - + registry.set(normalizedType, { kind, constructor }); adtToKind.set(normalizedType, kind); kindToAdt.set(kind, normalizedType); @@ -99,7 +100,7 @@ export function registerObjectType( /** * Resolve ADT type to registry entry - * + * * @param adtType - Full or main ADT type (e.g., "DEVC/K" or "DEVC") * @returns Registry entry or undefined if not found */ @@ -110,7 +111,7 @@ export function resolveType(adtType: string): RegistryEntry | undefined { /** * Resolve ADK kind to registry entry - * + * * @param kind - ADK kind constant * @returns Registry entry or undefined if not found */ @@ -174,27 +175,27 @@ export function getRegisteredKinds(): AdkKind[] { /** * Known ADT type to ADK kind mappings - * + * * Repository Objects: * - DEVC → Package - * - CLAS → Class + * - CLAS → Class * - INTF → Interface * - FUGR → FunctionGroup * - FUNC → FunctionModule * - PROG → Program * - INCL → Include - * + * * Data Dictionary: * - TABL → Table * - STRU → Structure (actually TABL with different category) * - DTEL → DataElement * - DOMA → Domain * - TTYP → TableType - * + * * Other: * - MSAG → MessageClass * - ENHS → EnhancementSpot - * + * * CTS: * - (Transport requests/tasks use different identification) */ @@ -207,13 +208,13 @@ export const ADT_TYPE_MAPPINGS = { FUNC: kinds.FunctionModule, PROG: kinds.Program, INCL: kinds.Include, - + // Data Dictionary TABL: kinds.Table, DTEL: kinds.DataElement, DOMA: kinds.Domain, TTYP: kinds.TableType, - + // Other MSAG: kinds.MessageClass, ENHS: kinds.EnhancementSpot, diff --git a/packages/adk/src/factory.ts b/packages/adk/src/factory.ts index 445887e4..3a27a0be 100644 --- a/packages/adk/src/factory.ts +++ b/packages/adk/src/factory.ts @@ -1,9 +1,9 @@ /** * ADK v2 - Generic Factory - * + * * Single entry point for creating ADK objects. * Resolves ADT types to correct ADK object implementations. - * + * * Resolution methods: * - get(name, adtType) - By name and ADT type (unique identifier) * - byKind(kind, name) - By ADK kind (type-safe) @@ -14,11 +14,7 @@ import type { AdkContext } from './base/context'; import type { AdkObject } from './base/model'; import type { AdkKind, AdkObjectForKind } from './base/kinds'; -import { - resolveType, - resolveKind, - parseAdtType, -} from './base/registry'; +import { resolveType, resolveKind, parseAdtType } from './base/registry'; // ============================================ // XML Parsing Utilities @@ -32,24 +28,26 @@ const NAME_PATTERN = /adtcore:name="([^"]+)"/; /** * Extract ADT type and name from XML - * + * * Relies on adtcore:type and adtcore:name attributes which are * the standard identifiers in ADT XML responses. - * + * * @param xml - XML string from ADT response * @returns Extracted type and name, or undefined if not found */ -export function parseXmlIdentity(xml: string): { type: string; name: string } | undefined { +export function parseXmlIdentity( + xml: string, +): { type: string; name: string } | undefined { const typeMatch = xml.match(TYPE_PATTERN); const nameMatch = xml.match(NAME_PATTERN); - + if (typeMatch && nameMatch) { return { type: typeMatch[1], name: nameMatch[1], }; } - + return undefined; } @@ -59,7 +57,7 @@ export function parseXmlIdentity(xml: string): { type: string; name: string } | /** * Generic ADK object for unregistered types - * + * * Provides core functionality (adtcore attributes, links) * without type-specific features. */ @@ -67,30 +65,38 @@ export class AdkGenericObject { readonly adtType: string; readonly adtMainType: string; readonly adtSubType?: string; - + protected readonly ctx: AdkContext; protected _name: string; protected _data?: unknown; - + constructor(ctx: AdkContext, name: string, adtType: string) { this.ctx = ctx; this._name = name; - + const parsed = parseAdtType(adtType); this.adtType = parsed.full; this.adtMainType = parsed.main; this.adtSubType = parsed.sub; } - - get name(): string { return this._name; } - get type(): string { return this.adtType; } - + + get name(): string { + return this._name; + } + get type(): string { + return this.adtType; + } + /** Check if data is loaded */ - get isLoaded(): boolean { return this._data !== undefined; } - + get isLoaded(): boolean { + return this._data !== undefined; + } + /** Get raw data (if loaded) */ - get data(): unknown { return this._data; } - + get data(): unknown { + return this._data; + } + /** Set data (for manual population) */ setData(data: unknown): void { this._data = data; @@ -107,62 +113,65 @@ export class AdkGenericObject { export interface AdkFactory { /** Context used by this factory */ readonly ctx: AdkContext; - + /** * Get object by name and ADT type - * + * * Supports both full types (DEVC/K) and main types (DEVC). * Returns deferred object - call load() to fetch data. - * + * * @example * const pkg = factory.get('ZPACKAGE', 'DEVC/K'); * await pkg.load(); - * + * * const cls = factory.get('ZCL_TEST', 'CLAS'); * await cls.load(); */ get(name: string, adtType: string): AdkObject | AdkGenericObject; - + /** * Get object with initial data (for deserialization) - * + * * Creates object pre-populated with data - no load() needed. * Used when deserializing from files rather than loading from SAP. - * + * * @example * const cls = factory.getWithData({ name: 'ZCL_TEST', description: 'Test' }, 'CLAS'); * // cls.isLoaded is true, no need to call load() */ - getWithData(data: Record, adtType: string): AdkObject | AdkGenericObject; - + getWithData( + data: Record, + adtType: string, + ): AdkObject | AdkGenericObject; + /** * Get object by ADK kind (type-safe) - * + * * Returns correctly typed object based on kind. * TypeScript infers the concrete return type from the kind parameter. - * + * * @example * import { Class, Interface } from '@abapify/adk'; * const cls = factory.byKind(Class, 'ZCL_TEST'); // → AdkClass * const intf = factory.byKind(Interface, 'ZIF_TEST'); // → AdkInterface */ byKind(kind: K, name: string): AdkObjectForKind; - + /** * Create object from XML response - * + * * Parses XML to extract type and name, then constructs * the correct object type. - * + * * @example * const xml = await client.fetch('/sap/bc/adt/oo/classes/ZCL_TEST'); * const cls = factory.fromXml(xml); */ fromXml(xml: string): AdkObject | AdkGenericObject | undefined; - + /** * Create new object (for creation workflows) - * + * * Returns deferred object without name - used when * creating new objects in SAP. */ @@ -175,60 +184,67 @@ export interface AdkFactory { /** * Create ADK factory - * + * * @param ctx - ADK context with services * @returns Factory instance */ export function createAdkFactory(ctx: AdkContext): AdkFactory { return { ctx, - + get(name: string, adtType: string): AdkObject | AdkGenericObject { const entry = resolveType(adtType); - + if (entry) { return new entry.constructor(ctx, name); } - + // Fallback to generic object return new AdkGenericObject(ctx, name, adtType); }, - - getWithData(data: Record, adtType: string): AdkObject | AdkGenericObject { + + getWithData( + data: Record, + adtType: string, + ): AdkObject | AdkGenericObject { const entry = resolveType(adtType); - + if (entry) { // Pass data directly to constructor - it will extract name from data.name return new entry.constructor(ctx, data); } - + // Fallback to generic object with name from data - const obj = new AdkGenericObject(ctx, (data as { name?: string }).name ?? '', adtType); + const obj = new AdkGenericObject( + ctx, + (data as { name?: string }).name ?? '', + adtType, + ); obj.setData(data); return obj; }, - + byKind(kind: K, name: string): AdkObjectForKind { const entry = resolveKind(kind); - + if (!entry) { throw new Error(`No constructor registered for kind: ${kind}`); } - + // Type assertion: registry guarantees correct constructor for kind return new entry.constructor(ctx, name) as AdkObjectForKind; }, - + fromXml(xml: string): AdkObject | AdkGenericObject | undefined { const identity = parseXmlIdentity(xml); - + if (!identity) { return undefined; } - + return this.get(identity.name, identity.type); }, - + create(adtType: string): AdkObject | AdkGenericObject { // Create with empty name - will be set during creation workflow return this.get('', adtType); @@ -245,17 +261,17 @@ import type { AdtClient } from '@abapify/adt-client'; /** * Create ADK factory from ADT client - * + * * Builds context from client and returns factory. * This is the main entry point for most users. - * + * * @example * import { createAdtClient } from '@abapify/adt-client'; * import { createAdk } from '@abapify/adk'; - * + * * const client = createAdtClient({ ... }); * const adk = createAdk(client); - * + * * const cls = adk.get('ZCL_TEST', 'CLAS'); * await cls.load(); */ @@ -265,6 +281,6 @@ export function createAdk(client: AdtClient): AdkFactory { const ctx: AdkContext = { client, }; - + return createAdkFactory(ctx); } diff --git a/packages/adk/src/index.ts b/packages/adk/src/index.ts index 7855f0f8..3276fe3f 100644 --- a/packages/adk/src/index.ts +++ b/packages/adk/src/index.ts @@ -1,11 +1,11 @@ /** * ADK v2 - ABAP Development Kit - * + * * Facade over ADT client providing stable ABAP object interfaces. - * + * * Usage: * import { createAdk, type AbapPackage } from '@abapify/adk'; - * + * * const adk = createAdk(client); * const pkg = await adk.getPackage('ZPACKAGE'); * const objects = await pkg.getObjects(); @@ -14,8 +14,8 @@ // Base types export type { AbapObject } from './base/types'; export type { AdkContext } from './base/context'; -export { - AdkObject, +export { + AdkObject, AdkMainObject, type LockHandle, type SaveOptions, @@ -47,17 +47,17 @@ export type { export { createAdkContract } from './base/adt'; // Global context management -export { - initializeAdk, - getGlobalContext, - isAdkInitialized, +export { + initializeAdk, + getGlobalContext, + isAdkInitialized, resetAdk, tryGetGlobalContext, } from './base/global-context'; // Package types and class -export type { - AbapPackage, +export type { + AbapPackage, PackageType, PackageAttributes, ObjectReference, @@ -65,7 +65,7 @@ export type { SoftwareComponent, TransportLayer, TransportConfig, - PackageXml, // Raw API response type (inferred from schema) + PackageXml, // Raw API response type (inferred from schema) } from './objects/repository/devc'; export { AdkPackage } from './objects/repository/devc'; @@ -76,14 +76,14 @@ export type { ClassVisibility, ClassInclude, ClassIncludeType, - ClassXml, // Raw API response type + ClassXml, // Raw API response type } from './objects/repository/clas'; export { AdkClass } from './objects/repository/clas'; // Interface types and class export type { AbapInterface, - InterfaceXml, // Raw API response type + InterfaceXml, // Raw API response type } from './objects/repository/intf'; export { AdkInterface } from './objects/repository/intf'; @@ -101,22 +101,33 @@ export type { TransportUpdateOptions, ReleaseResult, } from './objects/cts'; -export { AdkTransportItem, AdkTransportRequest, AdkTransportTask, AdkTransportObject, clearConfigCache } from './objects/cts'; +export { + AdkTransportItem, + AdkTransportRequest, + AdkTransportTask, + AdkTransportObject, + clearConfigCache, +} from './objects/cts'; // CTS - Simplified transport for import operations -export { - AdkTransport, - AdkTransportObjectRef, +export { + AdkTransport, + AdkTransportObjectRef, AdkTransportTaskRef, type TransportResponse, } from './objects/cts'; // Factory and registry export type { AdkFactory } from './factory'; -export { createAdk, createAdkFactory, AdkGenericObject, parseXmlIdentity } from './factory'; -export { - registerObjectType, - resolveType, +export { + createAdk, + createAdkFactory, + AdkGenericObject, + parseXmlIdentity, +} from './factory'; +export { + registerObjectType, + resolveType, resolveKind, parseAdtType, getMainType, diff --git a/packages/adk/src/objects/cts/transport-import.ts b/packages/adk/src/objects/cts/transport-import.ts index c045959f..b741b8c9 100644 --- a/packages/adk/src/objects/cts/transport-import.ts +++ b/packages/adk/src/objects/cts/transport-import.ts @@ -1,11 +1,11 @@ /** * AdkTransport - Simplified transport for import operations - * + * * Focused on the import use case: * - Get transport by number * - Iterate objects * - Load each object as proper ADK type - * + * * Architecture: * - Uses ADT contracts via ctx.client.adt.cts.transportrequests.get() * - No business logic beyond object iteration @@ -52,50 +52,64 @@ function asArray(val: T | T[] | undefined): T[] { /** * Transport object reference - lightweight wrapper - * + * * Contains metadata about an object in the transport. * Call load() to get the full ADK object. */ export class AdkTransportObjectRef { constructor( private readonly ctx: AdkContext, - private readonly data: TransportObjectData + private readonly data: TransportObjectData, ) {} /** Program ID (R3TR, LIMU, etc.) */ - get pgmid(): string { return this.data.pgmid ?? ''; } - + get pgmid(): string { + return this.data.pgmid ?? ''; + } + /** Object type (CLAS, INTF, DOMA, etc.) */ - get type(): string { return this.data.type ?? ''; } - + get type(): string { + return this.data.type ?? ''; + } + /** Object name */ - get name(): string { return this.data.name ?? ''; } - + get name(): string { + return this.data.name ?? ''; + } + /** Workbench type (more specific type) */ - get wbtype(): string | undefined { return this.data.wbtype; } - + get wbtype(): string | undefined { + return this.data.wbtype; + } + /** Object URI for direct access */ - get uri(): string | undefined { return this.data.uri; } - + get uri(): string | undefined { + return this.data.uri; + } + /** Object description */ - get description(): string | undefined { return this.data.obj_desc; } - + get description(): string | undefined { + return this.data.obj_desc; + } + /** Full object key (PGMID/TYPE/NAME) */ - get key(): string { return `${this.pgmid}/${this.type}/${this.name}`; } + get key(): string { + return `${this.pgmid}/${this.type}/${this.name}`; + } /** * Load the full ADK object - * + * * Uses the ADK factory to create the appropriate object type * (AdkClass, AdkInterface, AdkPackage, etc.) - * + * * @returns The loaded ADK object, or undefined if type not supported */ async load(): Promise { // Import dynamically to avoid circular dependency const { createAdk } = await import('../../factory'); const adk = createAdk(this.ctx.client); - + // Use the factory to get the object // The factory handles type resolution and loading try { @@ -112,7 +126,9 @@ export class AdkTransportObjectRef { } /** Raw data from API */ - get raw(): TransportObjectData { return this.data; } + get raw(): TransportObjectData { + return this.data; + } } /** @@ -121,32 +137,42 @@ export class AdkTransportObjectRef { export class AdkTransportTaskRef { constructor( private readonly ctx: AdkContext, - private readonly data: TransportTaskData + private readonly data: TransportTaskData, ) {} - get number(): string { return this.data.number ?? ''; } - get owner(): string { return this.data.owner ?? ''; } - get description(): string { return this.data.desc ?? ''; } - get status(): string { return this.data.status ?? ''; } - get statusText(): string { return this.data.status_text ?? ''; } + get number(): string { + return this.data.number ?? ''; + } + get owner(): string { + return this.data.owner ?? ''; + } + get description(): string { + return this.data.desc ?? ''; + } + get status(): string { + return this.data.status ?? ''; + } + get statusText(): string { + return this.data.status_text ?? ''; + } /** Objects in this task */ get objects(): AdkTransportObjectRef[] { return asArray(this.data.abap_object).map( - obj => new AdkTransportObjectRef(this.ctx, obj) + (obj) => new AdkTransportObjectRef(this.ctx, obj), ); } } /** * AdkTransport - Transport request for import operations - * + * * Simple, focused API for importing transport objects: - * + * * @example * ```typescript * const transport = await AdkTransport.get('DEVK900001'); - * + * * for (const objRef of transport.objects) { * console.log(`${objRef.type} ${objRef.name}`); * const adkObject = await objRef.load(); @@ -163,7 +189,7 @@ export class AdkTransport { private constructor( private readonly ctx: AdkContext, - private readonly data: TransportData + private readonly data: TransportData, ) {} // =========================================================================== @@ -171,38 +197,38 @@ export class AdkTransport { // =========================================================================== /** Transport number */ - get number(): string { - return this.data.name ?? this.data.request?.number ?? ''; + get number(): string { + return this.data.name ?? this.data.request?.number ?? ''; } /** Transport description */ - get description(): string { - return this.data.request?.desc ?? ''; + get description(): string { + return this.data.request?.desc ?? ''; } /** Transport owner */ - get owner(): string { - return this.data.request?.owner ?? ''; + get owner(): string { + return this.data.request?.owner ?? ''; } /** Transport status (D=Modifiable, R=Released) */ - get status(): string { - return this.data.request?.status ?? ''; + get status(): string { + return this.data.request?.status ?? ''; } /** Transport status text */ - get statusText(): string { - return this.data.request?.status_text ?? ''; + get statusText(): string { + return this.data.request?.status_text ?? ''; } /** Transport target system */ - get target(): string { - return this.data.request?.target ?? ''; + get target(): string { + return this.data.request?.target ?? ''; } /** Object type (K=Request, T=Task) */ - get objectType(): string { - return this.data.object_type ?? 'K'; + get objectType(): string { + return this.data.object_type ?? 'K'; } // =========================================================================== @@ -215,7 +241,7 @@ export class AdkTransport { const requestTasks = asArray(this.data.request?.task); const rootTasks = asArray(this.data.task); const allTasks = [...requestTasks, ...rootTasks]; - this._tasks = allTasks.map(t => new AdkTransportTaskRef(this.ctx, t)); + this._tasks = allTasks.map((t) => new AdkTransportTaskRef(this.ctx, t)); } return this._tasks; } @@ -226,7 +252,7 @@ export class AdkTransport { /** * All objects in this transport - * + * * Collects objects from: * - Direct objects on request * - Objects from all tasks @@ -277,19 +303,19 @@ export class AdkTransport { /** * Get objects filtered by type - * + * * @param types - Object types to include (e.g., ['CLAS', 'INTF']) */ getObjectsByType(...types: string[]): AdkTransportObjectRef[] { - const typeSet = new Set(types.map(t => t.toUpperCase())); - return this.objects.filter(obj => typeSet.has(obj.type.toUpperCase())); + const typeSet = new Set(types.map((t) => t.toUpperCase())); + return this.objects.filter((obj) => typeSet.has(obj.type.toUpperCase())); } /** * Get unique object types in this transport */ getObjectTypes(): string[] { - const types = new Set(this.objects.map(obj => obj.type)); + const types = new Set(this.objects.map((obj) => obj.type)); return Array.from(types).sort(); } @@ -309,7 +335,9 @@ export class AdkTransport { // =========================================================================== /** Raw API response (unwrapped) */ - get raw(): TransportData { return this.data; } + get raw(): TransportData { + return this.data; + } // =========================================================================== // Static Factory @@ -317,10 +345,10 @@ export class AdkTransport { /** * Get a transport by number - * + * * @param number - Transport number (e.g., 'DEVK900001') * @param ctx - Optional ADK context (uses global context if not provided) - * + * * @example * ```typescript * const transport = await AdkTransport.get('DEVK900001'); diff --git a/packages/adk/src/objects/cts/transport/transport.ts b/packages/adk/src/objects/cts/transport/transport.ts index afc9ccfd..f73e35b3 100644 --- a/packages/adk/src/objects/cts/transport/transport.ts +++ b/packages/adk/src/objects/cts/transport/transport.ts @@ -1,13 +1,13 @@ /** * AdkTransportRequest & AdkTransportTask - * + * * Simplified 2-layer structure: * - AdkTransportRequest: full transport request with tasks, CRUD, etc. * - AdkTransportTask: extends request with task-specific overrides - * + * * Both share the same API response structure, just different data sources. * Kept in one file to avoid circular dependency issues. - * + * * Architecture: * - Uses ADT contracts directly via ctx.client.adt.cts.* * - No intermediate "service" layer - ADK objects ARE the service layer @@ -19,13 +19,13 @@ import { getGlobalContext } from '../../../base/global-context'; import { AdkObject } from '../../../base/model'; import { TransportRequest as TransportRequestKind } from '../../../base/kinds'; import { requiresLock, parseSapTimestamp } from '../../../decorators'; -import type { - TransportData, - TransportRequestData, +import type { + TransportData, + TransportRequestData, TransportTaskData, TransportObjectData, - TransportCreateOptions, - TransportUpdateOptions, + TransportCreateOptions, + TransportUpdateOptions, ReleaseResult, LockHandle, } from './transport.types'; @@ -35,7 +35,11 @@ import { AdkTransportObject } from './transport-object'; // Helpers // ============================================================================= -const STATUS_TEXT: Record = { D: 'Modifiable', R: 'Released', N: 'Not released' }; +const STATUS_TEXT: Record = { + D: 'Modifiable', + R: 'Released', + N: 'Not released', +}; function asArray(val: T | T[] | undefined): T[] { if (!val) return []; @@ -44,7 +48,11 @@ function asArray(val: T | T[] | undefined): T[] { /** Escape XML special characters */ function escapeXml(s: string): string { - return s.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); + return s + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); } // ============================================================================= @@ -55,17 +63,19 @@ let cachedConfigUri: string | undefined; async function getConfigUri(ctx: AdkContext): Promise { if (cachedConfigUri) return cachedConfigUri; - - const response = await ctx.client.adt.cts.transportrequests.searchconfiguration.configurations.get(); + + const response = + await ctx.client.adt.cts.transportrequests.searchconfiguration.configurations.get(); const configs = response?.configurations; if (!configs) throw new Error('No search configuration found'); - + const configArray = Array.isArray(configs) ? configs : [configs]; - if (configArray.length === 0) throw new Error('No search configuration found'); - + if (configArray.length === 0) + throw new Error('No search configuration found'); + const uri = configArray[0]?.link?.href; if (!uri) throw new Error('No search configuration URI found'); - + cachedConfigUri = uri; return uri; } @@ -100,11 +110,11 @@ interface RawRequest { */ function collectAllRequests(result: unknown): RawRequest[] { const requests: RawRequest[] = []; - + if (!result || typeof result !== 'object') return requests; - + const data = result as Record; - + // Helper to extract requests from a container (modifiable, relstarted, released) const extractFromContainer = (container: unknown) => { if (!container || typeof container !== 'object') return; @@ -115,17 +125,17 @@ function collectAllRequests(result: unknown): RawRequest[] { requests.push(...(reqArray as RawRequest[])); } }; - + // Helper to process workbench or customizing section const processSection = (section: unknown) => { if (!section || typeof section !== 'object') return; const s = section as Record; - + // Direct containers extractFromContainer(s.modifiable); extractFromContainer(s.relstarted); extractFromContainer(s.released); - + // Target-specific containers const targets = s.target; if (targets) { @@ -140,10 +150,10 @@ function collectAllRequests(result: unknown): RawRequest[] { } } }; - + processSection(data.workbench); processSection(data.customizing); - + return requests; } @@ -163,11 +173,14 @@ interface TransportObjectDataInternal { /** * Transport Request - main transport object - * + * * Handles both requests (K) and can be extended for tasks (T). * Uses ADT contracts directly - no intermediate service layer. */ -export class AdkTransportRequest extends AdkObject { +export class AdkTransportRequest extends AdkObject< + typeof TransportRequestKind, + TransportObjectDataInternal +> { readonly kind = TransportRequestKind; protected _tasks?: AdkTransportTask[]; protected _objects?: AdkTransportObject[]; @@ -194,7 +207,7 @@ export class AdkTransportRequest extends AdkObject { - const rawResponse = await this.ctx.client.adt.cts.transportrequests.get(this.name); + const rawResponse = await this.ctx.client.adt.cts.transportrequests.get( + this.name, + ); // Unwrap the root element from the response const response = rawResponse.root; this.setData({ @@ -224,17 +239,33 @@ export class AdkTransportRequest extends AdkObject { + this._tasks = asArray(taskData).map((t) => { // Build response for task const { request, task: _existingTasks, ...rootProps } = this.response; const { task: _nestedTasks, ...requestWithoutTasks } = request || {}; - + const taskResponse: TransportData = { ...rootProps, object_type: 'T', name: t.number || '', - request: request ? requestWithoutTasks as typeof request : undefined, + request: request + ? (requestWithoutTasks as typeof request) + : undefined, task: [t], }; return new AdkTransportTask(this.ctx, taskResponse, this); @@ -270,7 +303,7 @@ export class AdkTransportRequest extends AdkObject new AdkTransportObject(o) + (o) => new AdkTransportObject(o), ); // Objects from tasks - const taskObjects = this.tasks.flatMap(t => t.objects); + const taskObjects = this.tasks.flatMap((t) => t.objects); this._objects = [...directObjects, ...taskObjects]; } return this._objects; @@ -295,21 +328,28 @@ export class AdkTransportRequest extends AdkObject`; - - await this.ctx.client.fetch(`/sap/bc/adt/cts/transportrequests/${this.number}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/vnd.sap.adt.transportorganizer.v1+xml', - Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml', + + await this.ctx.client.fetch( + `/sap/bc/adt/cts/transportrequests/${this.number}`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/vnd.sap.adt.transportorganizer.v1+xml', + Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml', + }, + body: xml, }, - body: xml, - }); - + ); + (this.itemData as { status?: string; status_text?: string }).status = 'R'; - (this.itemData as { status?: string; status_text?: string }).status_text = 'Released'; + (this.itemData as { status?: string; status_text?: string }).status_text = + 'Released'; return { success: true }; } catch (error) { - return { success: false, message: error instanceof Error ? error.message : String(error) }; + return { + success: false, + message: error instanceof Error ? error.message : String(error), + }; } } @@ -318,7 +358,10 @@ export class AdkTransportRequest extends AdkObject[1]); - + if (changes.description !== undefined) { (this.itemData as { desc?: string }).desc = changes.description; } @@ -354,48 +397,59 @@ export class AdkTransportRequest extends AdkObject { + static async create( + options: TransportCreateOptions, + ctx?: AdkContext, + ): Promise { const context = ctx ?? getGlobalContext(); - + // Get owner - use provided or auto-detect from system let owner = options.owner; if (!owner) { owner = await AdkTransportRequest.getCurrentUser(context); } - + // SAP ADT requires namespace-prefixed attributes (non-standard XML) const xml = ``; - - const responseXml = await context.client.fetch('/sap/bc/adt/cts/transportrequests', { - method: 'POST', - headers: { - 'Content-Type': 'application/vnd.sap.adt.transportorganizer.v1+xml', - Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml', + + const responseXml = await context.client.fetch( + '/sap/bc/adt/cts/transportrequests', + { + method: 'POST', + headers: { + 'Content-Type': 'application/vnd.sap.adt.transportorganizer.v1+xml', + Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml', + }, + body: xml, }, - body: xml, - }); - + ); + // Parse response - extract transport number from response XML const numberMatch = String(responseXml).match(/tm:number="([^"]+)"/); const number = numberMatch?.[1]; - if (!number) throw new Error('Failed to create transport - no number returned'); - + if (!number) + throw new Error('Failed to create transport - no number returned'); + return AdkTransportRequest.get(number, context); } /** * Get a transport request by number - * + * * @param number - Transport number (e.g., 'S0DK900001') * @param ctx - Optional ADK context (uses global context if not provided) */ - static async get(number: string, ctx?: AdkContext): Promise { + static async get( + number: string, + ctx?: AdkContext, + ): Promise { const context = ctx ?? getGlobalContext(); - const rawResponse = await context.client.adt.cts.transportrequests.get(number); + const rawResponse = + await context.client.adt.cts.transportrequests.get(number); // Unwrap the root element from the response const response = rawResponse.root; // Return task or request based on object_type @@ -407,52 +461,65 @@ export class AdkTransportRequest extends AdkObject { const context = ctx ?? getGlobalContext(); const configUri = await getConfigUri(context); - + const response = await context.client.adt.cts.transportrequests.list({ targets: 'true', configUri: configUri, }); - + const requests = collectAllRequests(response); // Wrap raw request data in TransportData structure expected by constructor - return requests.map(r => new AdkTransportRequest(context, { - name: r.number || '', - object_type: 'K', - request: { - number: r.number, - owner: r.owner, - desc: r.desc, - status: r.status, - uri: r.uri, - task: r.task as TransportTaskData | TransportTaskData[] | undefined, - abap_object: r.abap_object as TransportObjectData | TransportObjectData[] | undefined, - }, - } as TransportData)); + return requests.map( + (r) => + new AdkTransportRequest(context, { + name: r.number || '', + object_type: 'K', + request: { + number: r.number, + owner: r.owner, + desc: r.desc, + status: r.status, + uri: r.uri, + task: r.task as TransportTaskData | TransportTaskData[] | undefined, + abap_object: r.abap_object as + | TransportObjectData + | TransportObjectData[] + | undefined, + }, + } as TransportData), + ); } /** * Get current user from the system metadata - * + * * @param ctx - Optional ADK context (uses global context if not provided) */ static async getCurrentUser(ctx?: AdkContext): Promise { const context = ctx ?? getGlobalContext(); - - const xmlContent = await context.client.fetch('/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata', { - headers: { Accept: 'application/vnd.sap.adt.configuration.metadata.v1+xml' }, - }); - - const userMatch = String(xmlContent).match(/]*>([^<]+)]*>([^<]+)([^<]+)<\/LOCK_HANDLE>/, ); - - const handleMatch = String(response).match(/([^<]+)<\/LOCK_HANDLE>/); if (!handleMatch?.[1]) { - throw new Error(`Failed to acquire lock for ${this.number} - no handle returned`); + throw new Error( + `Failed to acquire lock for ${this.number} - no handle returned`, + ); } - + // Store in base class for @requiresLock decorator this['_lockHandle'] = { handle: handleMatch[1] }; return { handle: handleMatch[1] }; @@ -493,7 +564,7 @@ export class AdkTransportRequest extends AdkObject { const handle = this['_lockHandle']; if (!handle) return; - + await this.ctx.client.fetch( `/sap/bc/adt/cts/transportrequests/${this.number}?_action=UNLOCK&lockHandle=${encodeURIComponent(handle.handle)}`, { @@ -501,9 +572,9 @@ export class AdkTransportRequest extends AdkObject t.number === this.name) || taskArr[0]; + const found = taskArr.find((t) => t.number === this.name) || taskArr[0]; if (found) return found as unknown as TransportRequestData; } - return this.response.request || {} as TransportRequestData; + return this.response.request || ({} as TransportRequestData); } // =========================================================================== @@ -559,7 +634,9 @@ export class AdkTransportTask extends AdkTransportRequest { override get objects(): AdkTransportObject[] { if (!this._objects) { const taskData = this.itemData as unknown as TransportTaskData; - this._objects = asArray(taskData?.abap_object).map(o => new AdkTransportObject(o)); + this._objects = asArray(taskData?.abap_object).map( + (o) => new AdkTransportObject(o), + ); } return this._objects; } @@ -571,7 +648,7 @@ export class AdkTransportTask extends AdkTransportRequest { /** Parent transport request */ get request(): AdkTransportRequest { if (this.parentRef) return this.parentRef; - + if (!this._parentRequest) { // Parent request number comes from response.request.number or task's parent attribute const parentNumber = this.response.request?.number || this.parent; @@ -590,13 +667,17 @@ export class AdkTransportTask extends AdkTransportRequest { /** * Get a transport task by number - * + * * @param number - Task number (e.g., 'S0DK900001') * @param ctx - Optional ADK context (uses global context if not provided) */ - static override async get(number: string, ctx?: AdkContext): Promise { + static override async get( + number: string, + ctx?: AdkContext, + ): Promise { const context = ctx ?? getGlobalContext(); - const rawResponse = await context.client.adt.cts.transportrequests.get(number); + const rawResponse = + await context.client.adt.cts.transportrequests.get(number); // Unwrap the root element from the response return new AdkTransportTask(context, rawResponse.root); } diff --git a/packages/adk/src/objects/cts/transport/transport.types.ts b/packages/adk/src/objects/cts/transport/transport.types.ts index 8ee91b23..fcc5c64b 100644 --- a/packages/adk/src/objects/cts/transport/transport.types.ts +++ b/packages/adk/src/objects/cts/transport/transport.types.ts @@ -1,11 +1,11 @@ /** * Transport Request Types - * + * * Types are inferred from the contract layer (TransportGetResponse). * Only operation-specific types (options, results) are defined manually. - * + * * Schema Structure (from XSD): - * + * * Root (tm:root) * ├── object_type: 'K' (request) | 'T' (task) * ├── request (0..1) @@ -13,7 +13,7 @@ * │ └── all_objects - aggregated objects (shortcut) * └── task[] (0..unbounded) - appears at root when fetching a task directly * └── abap_object[] - objects in this task - * + * * Key insight: * - Fetching REQUEST (S0DK942970): objects in response.request.task[].abap_object * - Fetching TASK (S0DK942971): objects in response.task[].abap_object @@ -25,9 +25,9 @@ import type { TransportGetResponse } from '../../../base/adt'; // Inferred types from contract schema // ============================================ -/** +/** * Full response type from TransportService.get() - * + * * The schema wraps everything in a 'root' element, so we unwrap it here * to provide a flat structure for ADK consumers. */ @@ -37,20 +37,26 @@ export type TransportData = TransportGetResponse['root']; export type TransportRequestData = NonNullable; /** Task data from schema */ -export type TransportTaskData = NonNullable extends (infer T)[] ? T : NonNullable; +export type TransportTaskData = + NonNullable extends (infer T)[] + ? T + : NonNullable; /** Object data from schema */ -export type TransportObjectData = NonNullable extends (infer T)[] ? T : NonNullable; +export type TransportObjectData = + NonNullable extends (infer T)[] + ? T + : NonNullable; // ============================================ // Semantic type aliases (for clarity) // ============================================ /** Transport status codes */ -export type TransportStatus = 'D' | 'R' | 'N'; // D=Modifiable, R=Released, N=Not released +export type TransportStatus = 'D' | 'R' | 'N'; // D=Modifiable, R=Released, N=Not released /** Transport type */ -export type TransportType = 'K' | 'W' | 'T' | 'C'; // K=Workbench, W=Customizing, T=ToC, C=Copy +export type TransportType = 'K' | 'W' | 'T' | 'C'; // K=Workbench, W=Customizing, T=ToC, C=Copy // ============================================ // Re-export for convenience (inferred from schema) diff --git a/packages/adk/src/objects/repository/clas/clas.model.ts b/packages/adk/src/objects/repository/clas/clas.model.ts index 6c5fd5b3..aa3cd265 100644 --- a/packages/adk/src/objects/repository/clas/clas.model.ts +++ b/packages/adk/src/objects/repository/clas/clas.model.ts @@ -16,7 +16,7 @@ import type { ClassResponse } from '../../../base/adt'; /** * Class data type - imported from contract - * + * * The schema wraps everything in an 'abapClass' element, so we unwrap it here * to provide a flat structure for ADK consumers. */ @@ -24,11 +24,11 @@ export type ClassXml = ClassResponse['abapClass']; /** * ADK Class object - * + * * Inherits from AdkMainObject which provides: * - AdkObject: name, type, description, version, language, changedBy/At, createdBy/At, links * - AdkMainObject: package, packageRef, responsible, masterLanguage, masterSystem, abapLanguageVersion - * + * * Access class-specific properties via `data`: * - data.category, data.final, data.abstract, data.visibility * - data.sharedMemoryEnabled, data.modeled, data.fixPointArithmetic @@ -37,18 +37,20 @@ export type ClassXml = ClassResponse['abapClass']; export class AdkClass extends AdkMainObject { static readonly kind = ClassKind; readonly kind = AdkClass.kind; - + // ADT object URI (computed - not in data) - get objectUri(): string { return `/sap/bc/adt/oo/classes/${encodeURIComponent(this.name.toLowerCase())}`; } - + get objectUri(): string { + return `/sap/bc/adt/oo/classes/${encodeURIComponent(this.name.toLowerCase())}`; + } + // Lazy segments - source code - + async getMainSource(): Promise { return this.lazy('source:main', async () => { return this.crudContract.source.main.get(this.name); }); } - + async getIncludeSource(includeType: ClassIncludeType): Promise { return this.lazy(`source:${includeType}`, async () => { if (includeType === 'main') { @@ -58,88 +60,105 @@ export class AdkClass extends AdkMainObject { return this.crudContract.includes.get(this.name, includeType); }); } - + async getDefinitions(): Promise { return this.getIncludeSource('definitions'); } - + async getImplementations(): Promise { return this.getIncludeSource('implementations'); } - + async getTestClasses(): Promise { return this.getIncludeSource('testclasses'); } - + // ============================================ // Source Code Save Methods // ============================================ - + /** * Save main source code * Requires object to be locked first */ - async saveMainSource(source: string, options?: { lockHandle?: string; transport?: string }): Promise { + async saveMainSource( + source: string, + options?: { lockHandle?: string; transport?: string }, + ): Promise { const params = new URLSearchParams(); if (options?.lockHandle) params.set('lockHandle', options.lockHandle); if (options?.transport) params.set('corrNr', options.transport); - + await this.ctx.client.fetch( `/sap/bc/adt/oo/classes/${this.name.toLowerCase()}/source/main${params.toString() ? '?' + params.toString() : ''}`, { method: 'PUT', headers: { 'Content-Type': 'text/plain' }, body: source, - } + }, ); - + // Invalidate cached source invalidateLazy(this, 'source:main'); } - + /** * Save include source code * Requires object to be locked first */ - async saveIncludeSource(includeType: ClassIncludeType, source: string, options?: { lockHandle?: string; transport?: string }): Promise { + async saveIncludeSource( + includeType: ClassIncludeType, + source: string, + options?: { lockHandle?: string; transport?: string }, + ): Promise { const params = new URLSearchParams(); if (options?.lockHandle) params.set('lockHandle', options.lockHandle); if (options?.transport) params.set('corrNr', options.transport); - - const endpoint = includeType === 'main' - ? `/sap/bc/adt/oo/classes/${this.name.toLowerCase()}/source/main` - : `/sap/bc/adt/oo/classes/${this.name.toLowerCase()}/includes/${includeType}`; - + + const endpoint = + includeType === 'main' + ? `/sap/bc/adt/oo/classes/${this.name.toLowerCase()}/source/main` + : `/sap/bc/adt/oo/classes/${this.name.toLowerCase()}/includes/${includeType}`; + await this.ctx.client.fetch( `${endpoint}${params.toString() ? '?' + params.toString() : ''}`, { method: 'PUT', headers: { 'Content-Type': 'text/plain' }, body: source, - } + }, ); - + // Invalidate cached source invalidateLazy(this, `source:${includeType}`); } - + /** * Save all pending sources (set via _pendingSources) * Used by export workflow after deserialization from abapGit * Overrides base class method */ - protected override async savePendingSources(options?: { lockHandle?: string; transport?: string }): Promise { - const pendingSources = (this as unknown as { _pendingSources?: Record })._pendingSources; + protected override async savePendingSources(options?: { + lockHandle?: string; + transport?: string; + }): Promise { + const pendingSources = ( + this as unknown as { _pendingSources?: Record } + )._pendingSources; if (!pendingSources) return; - + const errors: Error[] = []; - + for (const [key, source] of Object.entries(pendingSources)) { try { if (key === 'main') { await this.saveMainSource(source, options); } else { - await this.saveIncludeSource(key as ClassIncludeType, source, options); + await this.saveIncludeSource( + key as ClassIncludeType, + source, + options, + ); } } catch (e) { // 409 Conflict means the include is already locked in the transport @@ -153,47 +172,48 @@ export class AdkClass extends AdkMainObject { errors.push(e instanceof Error ? e : new Error(String(e))); } } - + // Clear pending sources after save - delete (this as unknown as { _pendingSources?: Record })._pendingSources; + delete (this as unknown as { _pendingSources?: Record }) + ._pendingSources; delete (this as unknown as { _pendingSource?: string })._pendingSource; - + // If there were non-conflict errors, throw the first one if (errors.length > 0) { throw errors[0]; } } - + /** * Check if object has pending sources to save * Overrides base class method */ protected override hasPendingSources(): boolean { - return !!(this as unknown as { _pendingSources?: Record })._pendingSources; + return !!(this as unknown as { _pendingSources?: Record }) + ._pendingSources; } - + // ============================================ // CRUD contract config - enables save() // ============================================ - - protected override get wrapperKey() { return 'abapClass'; } - protected override get crudContract() { return this.ctx.client.adt.oo.classes; } - + + protected override get wrapperKey() { + return 'abapClass'; + } + protected override get crudContract() { + return this.ctx.client.adt.oo.classes; + } + // ============================================ // Static Factory Method // ============================================ - + static async get(name: string, ctx?: AdkContext): Promise { const context = ctx ?? getGlobalContext(); return new AdkClass(context, name).load(); } } -// Backward compatibility alias (deprecated) -/** @deprecated Use AdkClass instead */ -export const AbapClassModel = AdkClass; - // Self-register with ADK registry import { registerObjectType } from '../../../base/registry'; registerObjectType('CLAS', ClassKind, AdkClass); - \ No newline at end of file diff --git a/packages/adk/src/objects/repository/clas/index.ts b/packages/adk/src/objects/repository/clas/index.ts index 596450aa..3200c8f7 100644 --- a/packages/adk/src/objects/repository/clas/index.ts +++ b/packages/adk/src/objects/repository/clas/index.ts @@ -3,8 +3,8 @@ */ // Public types -export type { - AbapClass, +export type { + AbapClass, ClassCategory, ClassVisibility, ClassInclude, @@ -13,7 +13,7 @@ export type { } from './clas.types'; // ADK object (internal implementation) -export { AdkClass, AbapClassModel } from './clas.model'; +export { AdkClass } from './clas.model'; // Schema-inferred type for raw API response export type { ClassXml } from './clas.model'; diff --git a/packages/adk/src/objects/repository/devc/devc.model.ts b/packages/adk/src/objects/repository/devc/devc.model.ts index d40169fa..b982968d 100644 --- a/packages/adk/src/objects/repository/devc/devc.model.ts +++ b/packages/adk/src/objects/repository/devc/devc.model.ts @@ -20,7 +20,7 @@ import type { /** * Package data type - inferred from packagesContract response - * + * * The schema wraps everything in a 'package' element, so we unwrap it here * to provide a flat structure for ADK consumers. */ @@ -28,38 +28,47 @@ export type PackageXml = NonNullable; /** * ADK Package object - * + * * Inherits from AdkMainObject which provides: * - AdkObject: name, type, description, version, language, changedBy/At, createdBy/At, links * - AdkMainObject: packageRef, responsible, masterLanguage, masterSystem, abapLanguageVersion - * + * * Note: For packages, the parent package is stored in `superPackage` not `packageRef`. * The `package` getter is overridden to return the super package name. */ -export class AdkPackage extends AdkMainObject implements AbapPackage { +export class AdkPackage + extends AdkMainObject + implements AbapPackage +{ static readonly kind = PackageKind; readonly kind = AdkPackage.kind; - + // ADT object URI - get objectUri(): string { return `/sap/bc/adt/packages/${encodeURIComponent(this.name)}`; } - + get objectUri(): string { + return `/sap/bc/adt/packages/${encodeURIComponent(this.name)}`; + } + // Override package getter to use superPackage (packages use superPackage, not packageRef) - override get package(): string { - return (this.dataSync as unknown as { superPackage?: { name?: string } }).superPackage?.name ?? ''; + override get package(): string { + return ( + (this.dataSync as unknown as { superPackage?: { name?: string } }) + .superPackage?.name ?? '' + ); } - + // pak:* elements get attributes(): PackageAttributes { const attrs = this.dataSync.attributes; return { - packageType: (attrs?.packageType ?? 'development') as PackageAttributes['packageType'], + packageType: (attrs?.packageType ?? + 'development') as PackageAttributes['packageType'], isEncapsulated: attrs?.isEncapsulated ?? false, isAddingObjectsAllowed: attrs?.isAddingObjectsAllowed ?? true, recordChanges: attrs?.recordChanges ?? false, languageVersion: attrs?.languageVersion ?? '', }; } - + get superPackage(): ObjectReference | undefined { const sp = this.dataSync.superPackage; if (!sp?.name) return undefined; @@ -70,7 +79,7 @@ export class AdkPackage extends AdkMainObject im description: sp.description, }; } - + get applicationComponent(): ApplicationComponent | undefined { const ac = this.dataSync.applicationComponent; if (!ac?.name) return undefined; @@ -79,61 +88,67 @@ export class AdkPackage extends AdkMainObject im description: ac.description ?? '', }; } - + get transport(): TransportConfig | undefined { const t = this.dataSync.transport; if (!t) return undefined; return { - softwareComponent: t.softwareComponent?.name ? { - name: t.softwareComponent.name, - description: t.softwareComponent.description ?? '', - } : undefined, - transportLayer: t.transportLayer?.name ? { - name: t.transportLayer.name, - description: t.transportLayer.description ?? '', - } : undefined, + softwareComponent: t.softwareComponent?.name + ? { + name: t.softwareComponent.name, + description: t.softwareComponent.description ?? '', + } + : undefined, + transportLayer: t.transportLayer?.name + ? { + name: t.transportLayer.name, + description: t.transportLayer.description ?? '', + } + : undefined, }; } - + // Lazy segments - + async getSubpackages(): Promise { return this.lazy('subpackages', async () => { - // TODO: Call client.repository.packages.children(this.name) + // NOTE: Could use client.repository.packages.children(this.name) when available return []; }); } - + async getObjects(): Promise { return this.lazy('objects', async () => { - // TODO: Call client.repository.packages.objects(this.name) + // NOTE: Could use client.repository.packages.objects(this.name) when available return []; }); } - + async getAllObjects(): Promise { return this.lazy('allObjects', async () => { const direct = await this.getObjects(); const subpackages = await this.getSubpackages(); - + const nested = await Promise.all( - subpackages.map(pkg => pkg.getAllObjects()) + subpackages.map((pkg) => pkg.getAllObjects()), ); - + return [...direct, ...nested.flat()]; }); } - + // ============================================ // Deferred Loading (implements abstract from AdkObject) // ============================================ - + override async load(): Promise { const response = await this.ctx.client.adt.packages.get(this.name); // Type guard: response is a union of { package } | { packageTree } // ADK Package objects only use the package variant if (!response || !('package' in response) || !response.package) { - throw new Error(`Package '${this.name}' not found or returned empty response`); + throw new Error( + `Package '${this.name}' not found or returned empty response`, + ); } // Unwrap the package element from the response this.setData(response.package); @@ -142,16 +157,16 @@ export class AdkPackage extends AdkMainObject im // Note: save() not yet implemented - no crudContract defined // Package creation requires transport handling - + // Lock/unlock inherited from AdkObject using generic lock service - + // ============================================ // Static Factory Methods // ============================================ - + /** * Get a package by name - * + * * @param name - Package name (e.g., '$TMP', 'ZPACKAGE') * @param ctx - Optional ADK context (uses global context if not provided) */ @@ -163,10 +178,6 @@ export class AdkPackage extends AdkMainObject im } } -// Backward compatibility alias (deprecated) -/** @deprecated Use AdkPackage instead */ -export const AbapPackageModel = AdkPackage; - // Self-register with ADK registry import { registerObjectType } from '../../../base/registry'; registerObjectType('DEVC', PackageKind, AdkPackage); diff --git a/packages/adk/src/objects/repository/devc/index.ts b/packages/adk/src/objects/repository/devc/index.ts index 5e41e5b7..be7612ee 100644 --- a/packages/adk/src/objects/repository/devc/index.ts +++ b/packages/adk/src/objects/repository/devc/index.ts @@ -3,8 +3,8 @@ */ // Public types -export type { - AbapPackage, +export type { + AbapPackage, PackageType, PackageAttributes, ObjectReference, @@ -15,7 +15,7 @@ export type { } from './devc.types'; // ADK object (internal implementation) -export { AdkPackage, AbapPackageModel } from './devc.model'; +export { AdkPackage } from './devc.model'; // Schema-inferred type for raw API response export type { PackageXml } from './devc.model'; diff --git a/packages/adk/src/objects/repository/intf/index.ts b/packages/adk/src/objects/repository/intf/index.ts index aca14e4a..a038b526 100644 --- a/packages/adk/src/objects/repository/intf/index.ts +++ b/packages/adk/src/objects/repository/intf/index.ts @@ -6,7 +6,7 @@ export type { AbapInterface } from './intf.types'; // ADK object (internal implementation) -export { AdkInterface, AbapInterfaceModel } from './intf.model'; +export { AdkInterface } from './intf.model'; // Schema-inferred type for raw API response export type { InterfaceXml } from './intf.model'; diff --git a/packages/adk/src/objects/repository/intf/intf.model.ts b/packages/adk/src/objects/repository/intf/intf.model.ts index b315a87c..d2f1bf89 100644 --- a/packages/adk/src/objects/repository/intf/intf.model.ts +++ b/packages/adk/src/objects/repository/intf/intf.model.ts @@ -14,7 +14,7 @@ import type { InterfaceResponse } from '../../../base/adt'; /** * Interface data type - imported from contract - * + * * The schema wraps everything in an 'abapInterface' element, so we unwrap it here * to provide a flat structure for ADK consumers. */ @@ -22,67 +22,79 @@ export type InterfaceXml = InterfaceResponse['abapInterface']; /** * ADK Interface object - * + * * Inherits from AdkMainObject which provides: * - AdkObject: name, type, description, version, language, changedBy/At, createdBy/At, links * - AdkMainObject: package, packageRef, responsible, masterLanguage, masterSystem, abapLanguageVersion - * + * * Access interface-specific properties via `data`: * - data.modeled, data.sourceUri, data.fixPointArithmetic, data.activeUnicodeCheck */ -export class AdkInterface extends AdkMainObject { +export class AdkInterface extends AdkMainObject< + typeof InterfaceKind, + InterfaceXml +> { static readonly kind = InterfaceKind; readonly kind = AdkInterface.kind; - + // ADT object URI (computed - not in data) - get objectUri(): string { return `/sap/bc/adt/oo/interfaces/${encodeURIComponent(this.name.toLowerCase())}`; } - + get objectUri(): string { + return `/sap/bc/adt/oo/interfaces/${encodeURIComponent(this.name.toLowerCase())}`; + } + // Lazy segments - source code - + async getSource(): Promise { return this.lazy('source', async () => { return this.ctx.client.adt.oo.interfaces.source.main.get(this.name); }); } - + // ============================================ // Source Code Save Methods // ============================================ - + /** * Save main source code * Requires object to be locked first */ - async saveMainSource(source: string, options?: { lockHandle?: string; transport?: string }): Promise { + async saveMainSource( + source: string, + options?: { lockHandle?: string; transport?: string }, + ): Promise { const params = new URLSearchParams(); if (options?.lockHandle) params.set('lockHandle', options.lockHandle); if (options?.transport) params.set('corrNr', options.transport); - + await this.ctx.client.fetch( `/sap/bc/adt/oo/interfaces/${this.name.toLowerCase()}/source/main${params.toString() ? '?' + params.toString() : ''}`, { method: 'PUT', headers: { 'Content-Type': 'text/plain' }, body: source, - } + }, ); } - + /** * Save pending source (set via _pendingSource) * Used by export workflow after deserialization from abapGit * Overrides base class method */ - protected override async savePendingSources(options?: { lockHandle?: string; transport?: string }): Promise { - const pendingSource = (this as unknown as { _pendingSource?: string })._pendingSource; + protected override async savePendingSources(options?: { + lockHandle?: string; + transport?: string; + }): Promise { + const pendingSource = (this as unknown as { _pendingSource?: string }) + ._pendingSource; if (!pendingSource) return; - + await this.saveMainSource(pendingSource, options); - + // Clear pending source after save delete (this as unknown as { _pendingSource?: string })._pendingSource; } - + /** * Check if object has pending sources to save * Overrides base class method @@ -90,28 +102,28 @@ export class AdkInterface extends AdkMainObject { const context = ctx ?? getGlobalContext(); return new AdkInterface(context, name).load(); } } -// Backward compatibility alias (deprecated) -/** @deprecated Use AdkInterface instead */ -export const AbapInterfaceModel = AdkInterface; - // Self-register with ADK registry import { registerObjectType } from '../../../base/registry'; registerObjectType('INTF', InterfaceKind, AdkInterface); diff --git a/packages/adk/tests/transport-import.test.ts b/packages/adk/tests/transport-import.test.ts index ed84cdfa..b850d3e5 100644 --- a/packages/adk/tests/transport-import.test.ts +++ b/packages/adk/tests/transport-import.test.ts @@ -1,6 +1,6 @@ /** * AdkTransport Integration Tests - * + * * Tests the new simplified transport import functionality: * - AdkTransport.get() - Load transport by number * - transport.objects - Iterate transport objects @@ -17,65 +17,65 @@ const mockTransportResponse = { name: 'DEVK900001', type: 'RQRQ', request: { - number: 'DEVK900001', - parent: '', - owner: 'DEVELOPER', - desc: 'Test workbench request', - type: 'K', - status: 'D', - status_text: 'Modifiable', - target: 'PRD', - target_desc: 'Production System', - source_client: '100', - uri: '/sap/bc/adt/cts/transportrequests/DEVK900001', - task: [ - { - number: 'DEVK900002', - parent: 'DEVK900001', - owner: 'DEVELOPER', - desc: 'Development task', - type: 'S', - status: 'D', - status_text: 'Modifiable', - abap_object: [ - { - pgmid: 'R3TR', - type: 'CLAS', - name: 'ZCL_TEST_CLASS', - wbtype: 'CLAS', - uri: '/sap/bc/adt/oo/classes/zcl_test_class', - obj_desc: 'Test Class', - }, - { + number: 'DEVK900001', + parent: '', + owner: 'DEVELOPER', + desc: 'Test workbench request', + type: 'K', + status: 'D', + status_text: 'Modifiable', + target: 'PRD', + target_desc: 'Production System', + source_client: '100', + uri: '/sap/bc/adt/cts/transportrequests/DEVK900001', + task: [ + { + number: 'DEVK900002', + parent: 'DEVK900001', + owner: 'DEVELOPER', + desc: 'Development task', + type: 'S', + status: 'D', + status_text: 'Modifiable', + abap_object: [ + { + pgmid: 'R3TR', + type: 'CLAS', + name: 'ZCL_TEST_CLASS', + wbtype: 'CLAS', + uri: '/sap/bc/adt/oo/classes/zcl_test_class', + obj_desc: 'Test Class', + }, + { + pgmid: 'R3TR', + type: 'FUGR', + name: 'ZTEST_FUNCTION_GROUP', + wbtype: 'FUGR', + uri: '/sap/bc/adt/functions/groups/ztest_function_group', + obj_desc: 'Test Function Group', + }, + ], + }, + { + number: 'DEVK900003', + parent: 'DEVK900001', + owner: 'DEVELOPER2', + desc: 'Second developer task', + type: 'S', + status: 'R', + status_text: 'Released', + abap_object: { pgmid: 'R3TR', - type: 'FUGR', - name: 'ZTEST_FUNCTION_GROUP', - wbtype: 'FUGR', - uri: '/sap/bc/adt/functions/groups/ztest_function_group', - obj_desc: 'Test Function Group', + type: 'PROG', + name: 'ZTEST_REPORT', + wbtype: 'PROG', + uri: '/sap/bc/adt/programs/programs/ztest_report', + obj_desc: 'Test Report', }, - ], - }, - { - number: 'DEVK900003', - parent: 'DEVK900001', - owner: 'DEVELOPER2', - desc: 'Second developer task', - type: 'S', - status: 'R', - status_text: 'Released', - abap_object: { - pgmid: 'R3TR', - type: 'PROG', - name: 'ZTEST_REPORT', - wbtype: 'PROG', - uri: '/sap/bc/adt/programs/programs/ztest_report', - obj_desc: 'Test Report', }, - }, - ], - }, - }, // close root + ], + }, + }, // close root }; // Create mock client @@ -99,14 +99,14 @@ describe('AdkTransport', () => { describe('AdkTransport.get()', () => { it('should load transport by number', async () => { const mockClient = createMockClient(); - + // Import and initialize ADK with mock client const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); - + expect(transport).toBeDefined(); expect(transport.number).toBe('DEVK900001'); expect(transport.description).toBe('Test workbench request'); @@ -117,13 +117,13 @@ describe('AdkTransport', () => { it('should expose transport properties', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); - + expect(transport.target).toBe('PRD'); expect(transport.objectType).toBe('K'); }); @@ -132,29 +132,29 @@ describe('AdkTransport', () => { describe('transport.objects', () => { it('should collect all objects from all tasks', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const objects = transport.objects; - + // Should have 3 objects total (2 from task 1, 1 from task 2) expect(objects).toHaveLength(3); }); it('should expose object properties', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const objects = transport.objects; - - const classObj = objects.find(o => o.type === 'CLAS'); + + const classObj = objects.find((o) => o.type === 'CLAS'); expect(classObj).toBeDefined(); expect(classObj?.name).toBe('ZCL_TEST_CLASS'); expect(classObj?.pgmid).toBe('R3TR'); @@ -165,22 +165,22 @@ describe('AdkTransport', () => { describe('transport.tasks', () => { it('should expose tasks with their objects', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const tasks = transport.tasks; - + expect(tasks).toHaveLength(2); - - const task1 = tasks.find(t => t.number === 'DEVK900002'); + + const task1 = tasks.find((t) => t.number === 'DEVK900002'); expect(task1).toBeDefined(); expect(task1?.owner).toBe('DEVELOPER'); expect(task1?.objects).toHaveLength(2); - - const task2 = tasks.find(t => t.number === 'DEVK900003'); + + const task2 = tasks.find((t) => t.number === 'DEVK900003'); expect(task2).toBeDefined(); expect(task2?.owner).toBe('DEVELOPER2'); expect(task2?.objects).toHaveLength(1); @@ -190,17 +190,17 @@ describe('AdkTransport', () => { describe('transport.getObjectsByType()', () => { it('should filter objects by type', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); - + const classes = transport.getObjectsByType('CLAS'); expect(classes).toHaveLength(1); expect(classes[0].name).toBe('ZCL_TEST_CLASS'); - + const programs = transport.getObjectsByType('PROG'); expect(programs).toHaveLength(1); expect(programs[0].name).toBe('ZTEST_REPORT'); @@ -208,13 +208,13 @@ describe('AdkTransport', () => { it('should filter by multiple types', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); - + const classesAndPrograms = transport.getObjectsByType('CLAS', 'PROG'); expect(classesAndPrograms).toHaveLength(2); }); @@ -223,14 +223,14 @@ describe('AdkTransport', () => { describe('transport.getObjectCountByType()', () => { it('should return object counts by type', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const counts = transport.getObjectCountByType(); - + expect(counts).toEqual({ CLAS: 1, FUGR: 1, @@ -265,7 +265,7 @@ describe('AdkTransport', () => { }, }, }; - + const mockClient = { adt: { cts: { @@ -275,14 +275,14 @@ describe('AdkTransport', () => { }, }, }; - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const objects = transport.objects; - + // Should have 2 unique objects, not 3 (deduplication happens in collectObjects) expect(objects).toHaveLength(2); }); @@ -292,14 +292,14 @@ describe('AdkTransport', () => { describe('AdkTransportObjectRef', () => { it('should have correct type and name', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const objRef = transport.objects[0]; - + expect(objRef.type).toBe('CLAS'); expect(objRef.name).toBe('ZCL_TEST_CLASS'); expect(objRef.pgmid).toBe('R3TR'); @@ -312,14 +312,14 @@ describe('AdkTransportObjectRef', () => { describe('AdkTransportTaskRef', () => { it('should expose task properties', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const task = transport.tasks[0]; - + expect(task.number).toBe('DEVK900002'); expect(task.owner).toBe('DEVELOPER'); expect(task.description).toBe('Development task'); @@ -329,14 +329,14 @@ describe('AdkTransportTaskRef', () => { it('should provide access to task objects', async () => { const mockClient = createMockClient(); - + const { initializeAdk, AdkTransport } = await import('../src/index'); // eslint-disable-next-line @typescript-eslint/no-explicit-any initializeAdk(mockClient as any); - + const transport = await AdkTransport.get('DEVK900001'); const task = transport.tasks[0]; - + expect(task.objects).toHaveLength(2); expect(task.objects[0].type).toBe('CLAS'); expect(task.objects[1].type).toBe('FUGR'); diff --git a/packages/adt-atc/README.md b/packages/adt-atc/README.md index f7d09f9e..030b238f 100644 --- a/packages/adt-atc/README.md +++ b/packages/adt-atc/README.md @@ -16,9 +16,7 @@ Add to your `adt.config.ts`: ```typescript export default { - commands: [ - '@abapify/adt-atc/commands/atc', - ], + commands: ['@abapify/adt-atc/commands/atc'], }; ``` @@ -43,20 +41,24 @@ adt atc -t S0DK942970 --format gitlab --output gl-code-quality.json ### Options -| Option | Description | -|--------|-------------| -| `-p, --package ` | Run ATC on package | -| `-o, --object ` | Run ATC on specific object | -| `-t, --transport ` | Run ATC on transport request | -| `--variant ` | ATC check variant (default: from system customizing) | -| `--max-results ` | Maximum number of results (default: 100) | -| `--format ` | Output format: console, json, gitlab, sarif | -| `--output ` | Output file (required for gitlab/sarif format) | +| Option | Description | +| ----------------------------- | ---------------------------------------------------- | +| `-p, --package ` | Run ATC on package | +| `-o, --object ` | Run ATC on specific object | +| `-t, --transport ` | Run ATC on transport request | +| `--variant ` | ATC check variant (default: from system customizing) | +| `--max-results ` | Maximum number of results (default: 100) | +| `--format ` | Output format: console, json, gitlab, sarif | +| `--output ` | Output file (required for gitlab/sarif format) | ### Programmatic Usage ```typescript -import { atcCommand, outputSarifReport, outputGitLabCodeQuality } from '@abapify/adt-atc'; +import { + atcCommand, + outputSarifReport, + outputGitLabCodeQuality, +} from '@abapify/adt-atc'; import type { AtcResult, AtcFinding } from '@abapify/adt-atc'; // Use the formatters directly diff --git a/packages/adt-atc/src/commands/atc.ts b/packages/adt-atc/src/commands/atc.ts index b1a0c84e..2c279b80 100644 --- a/packages/adt-atc/src/commands/atc.ts +++ b/packages/adt-atc/src/commands/atc.ts @@ -1,6 +1,6 @@ /** * ATC Command Plugin - * + * * CLI-agnostic command for running ABAP Test Cockpit checks. * Uses the CliContext.getAdtClient() factory for API access. */ @@ -15,25 +15,42 @@ import type { AtcResult, AtcFinding, OutputFormat } from '../types'; interface AdtClient { adt: { atc: { - customizing: { get: () => Promise<{ customizing: { properties: { property?: Array<{ name: string; value?: string }> } } }> }; + customizing: { + get: () => Promise<{ + customizing: { + properties: { property?: Array<{ name: string; value?: string }> }; + }; + }>; + }; worklists: { - create: (params: { checkVariant: string }) => Promise; - get: (id: string, params: { includeExemptedFindings: string }) => Promise; + create: (params: { + checkVariant: string; + }) => Promise< + | string + | { worklistRun?: { worklistId: string }; worklist?: { id: string } } + >; + get: ( + id: string, + params: { includeExemptedFindings: string }, + ) => Promise; }; - runs: { - post: (params: { worklistId: string }, body: { - run: { - maximumVerdicts: number; - objectSets: { - objectSet: Array<{ - kind: string; - objectReferences: { - objectReference: Array<{ uri: string }>; - }; - }>; + runs: { + post: ( + params: { worklistId: string }, + body: { + run: { + maximumVerdicts: number; + objectSets: { + objectSet: Array<{ + kind: string; + objectReferences: { + objectReference: Array<{ uri: string }>; + }; + }>; + }; }; - }; - }) => Promise; + }, + ) => Promise; }; }; }; @@ -93,13 +110,13 @@ function adtLink(name: string, uri: string, systemName?: string): string { */ function convertWorklistToResult( worklistResponse: WorklistResponse, - checkVariant: string + checkVariant: string, ): AtcResult { const findings: AtcFinding[] = []; if (worklistResponse.worklist) { const objects = worklistResponse.worklist.objects.object || []; - + for (const obj of objects) { const objFindings = obj.findings.finding || []; for (const finding of objFindings) { @@ -119,9 +136,9 @@ function convertWorklistToResult( } } - const errorCount = findings.filter(f => f.priority === 1).length; - const warningCount = findings.filter(f => f.priority === 2).length; - const infoCount = findings.filter(f => f.priority >= 3).length; + const errorCount = findings.filter((f) => f.priority === 1).length; + const warningCount = findings.filter((f) => f.priority === 2).length; + const infoCount = findings.filter((f) => f.priority >= 3).length; return { checkVariant, @@ -145,8 +162,7 @@ function displayAtcResults(result: AtcResult, systemName?: string): void { console.log(`\n📊 ATC Results Summary:`); console.log(` 🎯 Variant: ${result.checkVariant}`); - if (result.errorCount > 0) - console.log(` ❌ Errors: ${result.errorCount}`); + if (result.errorCount > 0) console.log(` ❌ Errors: ${result.errorCount}`); if (result.warningCount > 0) console.log(` ⚠️ Warnings: ${result.warningCount}`); if (result.infoCount > 0) console.log(` ℹ️ Info: ${result.infoCount}`); @@ -157,10 +173,12 @@ function displayAtcResults(result: AtcResult, systemName?: string): void { result.findings.slice(0, 5).forEach((finding) => { const priorityIcon = finding.priority === 1 ? '❌' : finding.priority === 2 ? '⚠️' : 'ℹ️'; - const objectLink = finding.location + const objectLink = finding.location ? adtLink(finding.objectName, finding.location, systemName) : finding.objectName; - console.log(` ${priorityIcon} ${finding.checkTitle || finding.checkId}`); + console.log( + ` ${priorityIcon} ${finding.checkTitle || finding.checkId}`, + ); console.log(` ${finding.messageText}`); console.log(` Object: ${objectLink} (${finding.objectType})`); }); @@ -179,17 +197,38 @@ function displayAtcResults(result: AtcResult, systemName?: string): void { export const atcCommand: CliCommandPlugin = { name: 'atc', description: 'Run ABAP Test Cockpit (ATC) checks', - + options: [ { flags: '-p, --package ', description: 'Run ATC on package' }, - { flags: '-o, --object ', description: 'Run ATC on specific object (e.g., /sap/bc/adt/oo/classes/zcl_my_class)' }, - { flags: '-t, --transport ', description: 'Run ATC on transport request (e.g., S0DK942970)' }, - { flags: '--variant ', description: 'ATC check variant (default: from system customizing)' }, - { flags: '--max-results ', description: 'Maximum number of results', default: '100' }, - { flags: '--format ', description: 'Output format: console, json, gitlab, sarif', default: 'console' }, - { flags: '--output ', description: 'Output file (required for gitlab/sarif format)' }, + { + flags: '-o, --object ', + description: + 'Run ATC on specific object (e.g., /sap/bc/adt/oo/classes/zcl_my_class)', + }, + { + flags: '-t, --transport ', + description: 'Run ATC on transport request (e.g., S0DK942970)', + }, + { + flags: '--variant ', + description: 'ATC check variant (default: from system customizing)', + }, + { + flags: '--max-results ', + description: 'Maximum number of results', + default: '100', + }, + { + flags: '--format ', + description: 'Output format: console, json, gitlab, sarif', + default: 'console', + }, + { + flags: '--output ', + description: 'Output file (required for gitlab/sarif format)', + }, ], - + async execute(args, ctx: CliContext) { const options = args as { package?: string; @@ -202,32 +241,45 @@ export const atcCommand: CliCommandPlugin = { }; // Validate mutually exclusive options - const targetCount = [options.package, options.object, options.transport].filter(Boolean).length; - + const targetCount = [ + options.package, + options.object, + options.transport, + ].filter(Boolean).length; + if (targetCount === 0) { - ctx.logger.error('❌ One of --package, --object, or --transport is required'); + ctx.logger.error( + '❌ One of --package, --object, or --transport is required', + ); process.exit(1); } if (targetCount > 1) { - ctx.logger.error('❌ Only one of --package, --object, or --transport can be specified'); + ctx.logger.error( + '❌ Only one of --package, --object, or --transport can be specified', + ); process.exit(1); } // Validate output file for gitlab/sarif formats - if ((options.format === 'gitlab' || options.format === 'sarif') && !options.output) { + if ( + (options.format === 'gitlab' || options.format === 'sarif') && + !options.output + ) { ctx.logger.error(`❌ --output is required for ${options.format} format`); process.exit(1); } // Get ADT client from context if (!ctx.getAdtClient) { - ctx.logger.error('❌ ADT client not available. This command requires authentication.'); + ctx.logger.error( + '❌ ADT client not available. This command requires authentication.', + ); ctx.logger.error(' Run: adt auth login'); process.exit(1); } - const client = await ctx.getAdtClient() as AdtClient; + const client = (await ctx.getAdtClient()) as AdtClient; ctx.logger.info('🔍 Running ABAP Test Cockpit checks...'); @@ -252,12 +304,12 @@ export const atcCommand: CliCommandPlugin = { // Step 1: Get ATC customizing to find default check variant ctx.logger.info('📋 Reading ATC customizing...'); const customizing = await client.adt.atc.customizing.get(); - + // Find systemCheckVariant in properties let checkVariant = options.variant; if (!checkVariant) { const variantProp = customizing.customizing.properties.property?.find( - p => p.name === 'systemCheckVariant' + (p) => p.name === 'systemCheckVariant', ); if (variantProp?.value) { checkVariant = variantProp.value; @@ -269,17 +321,25 @@ export const atcCommand: CliCommandPlugin = { // Step 2: Create worklist (just with checkVariant, no objects) ctx.logger.info('📋 Creating ATC worklist...'); - const worklistCreateResponse = await client.adt.atc.worklists.create({ checkVariant }); - + const worklistCreateResponse = await client.adt.atc.worklists.create({ + checkVariant, + }); + // Extract worklist ID - SAP can return plain string or object let worklistId: string; if (typeof worklistCreateResponse === 'string') { // Plain string response - extract ID from XML or use as-is const idMatch = worklistCreateResponse.match(/id="([^"]+)"/); worklistId = idMatch ? idMatch[1] : worklistCreateResponse.trim(); - } else if ('worklist' in worklistCreateResponse && worklistCreateResponse.worklist?.id) { + } else if ( + 'worklist' in worklistCreateResponse && + worklistCreateResponse.worklist?.id + ) { worklistId = worklistCreateResponse.worklist.id; - } else if ('worklistRun' in worklistCreateResponse && worklistCreateResponse.worklistRun?.worklistId) { + } else if ( + 'worklistRun' in worklistCreateResponse && + worklistCreateResponse.worklistRun?.worklistId + ) { worklistId = worklistCreateResponse.worklistRun.worklistId; } else { ctx.logger.error('❌ Failed to get worklist ID from response'); @@ -294,12 +354,14 @@ export const atcCommand: CliCommandPlugin = { run: { maximumVerdicts: maxResults, objectSets: { - objectSet: [{ - kind: 'inclusive', - objectReferences: { - objectReference: [{ uri: targetUri }], + objectSet: [ + { + kind: 'inclusive', + objectReferences: { + objectReference: [{ uri: targetUri }], + }, }, - }], + ], }, }, }; @@ -307,10 +369,15 @@ export const atcCommand: CliCommandPlugin = { // Step 4: Get results ctx.logger.info('📊 Fetching results...'); - const worklistResult = await client.adt.atc.worklists.get(worklistId, { includeExemptedFindings: 'false' }); + const worklistResult = await client.adt.atc.worklists.get(worklistId, { + includeExemptedFindings: 'false', + }); // Convert to AtcResult - const result = convertWorklistToResult(worklistResult as WorklistResponse, checkVariant); + const result = convertWorklistToResult( + worklistResult as WorklistResponse, + checkVariant, + ); // Output based on format if (options.format === 'json') { diff --git a/packages/adt-atc/src/formatters/gitlab.ts b/packages/adt-atc/src/formatters/gitlab.ts index ab960fe4..3e8b3b72 100644 --- a/packages/adt-atc/src/formatters/gitlab.ts +++ b/packages/adt-atc/src/formatters/gitlab.ts @@ -1,6 +1,6 @@ /** * GitLab Code Quality Formatter - * + * * Outputs ATC findings in GitLab Code Quality format. */ @@ -9,7 +9,7 @@ import type { AtcResult, AtcFinding } from '../types'; export async function outputGitLabCodeQuality( result: AtcResult, - outputFile: string + outputFile: string, ): Promise { // Transform ATC findings to GitLab Code Quality format const gitlabReport = result.findings.map((finding: AtcFinding) => { diff --git a/packages/adt-atc/src/formatters/sarif.ts b/packages/adt-atc/src/formatters/sarif.ts index 12205750..0e31fe40 100644 --- a/packages/adt-atc/src/formatters/sarif.ts +++ b/packages/adt-atc/src/formatters/sarif.ts @@ -1,6 +1,6 @@ /** * SARIF Formatter - * + * * Outputs ATC findings in SARIF format for GitHub Code Scanning. */ @@ -10,7 +10,7 @@ import type { AtcResult, AtcFinding } from '../types'; export async function outputSarifReport( result: AtcResult, outputFile: string, - _targetName?: string + _targetName?: string, ): Promise { // Transform ATC findings to SARIF format const rules = Array.from( @@ -27,16 +27,16 @@ export async function outputSarifReport( f.priority === 1 ? 'error' : f.priority === 2 - ? 'warning' - : 'note', + ? 'warning' + : 'note', }, properties: { tags: ['abap', 'code-quality'], precision: 'high', }, }, - ]) - ).values() + ]), + ).values(), ); const results = result.findings.map((finding: AtcFinding) => { @@ -52,8 +52,8 @@ export async function outputSarifReport( finding.priority === 1 ? 'error' : finding.priority === 2 - ? 'warning' - : 'note', + ? 'warning' + : 'note', message: { text: finding.messageText }, locations: [ { @@ -94,6 +94,6 @@ export async function outputSarifReport( await writeFile(outputFile, JSON.stringify(sarifReport, null, 2)); console.log(`\n📄 SARIF report written to: ${outputFile}`); console.log( - `📊 ${result.totalFindings} issues exported for GitHub Code Scanning` + `📊 ${result.totalFindings} issues exported for GitHub Code Scanning`, ); } diff --git a/packages/adt-atc/src/index.ts b/packages/adt-atc/src/index.ts index 6703dbe9..1c366f2a 100644 --- a/packages/adt-atc/src/index.ts +++ b/packages/adt-atc/src/index.ts @@ -1,8 +1,8 @@ /** * @abapify/adt-atc - * + * * ABAP Test Cockpit (ATC) CLI plugin for adt-cli. - * + * * @example * ```typescript * // In adt.config.ts diff --git a/packages/adt-atc/src/types.ts b/packages/adt-atc/src/types.ts index 6cdb3024..32eee8f3 100644 --- a/packages/adt-atc/src/types.ts +++ b/packages/adt-atc/src/types.ts @@ -1,6 +1,6 @@ /** * ATC Types - * + * * Types for ATC command and formatters. */ diff --git a/packages/adt-atc/tsdown.config.ts b/packages/adt-atc/tsdown.config.ts index fe63c840..52a9e5d6 100644 --- a/packages/adt-atc/tsdown.config.ts +++ b/packages/adt-atc/tsdown.config.ts @@ -9,9 +9,5 @@ export default defineConfig({ dts: true, sourcemap: true, clean: true, - external: [ - '@abapify/adt-plugin', - '@abapify/adt-contracts', - 'chalk', - ], + external: ['@abapify/adt-plugin', '@abapify/adt-contracts', 'chalk'], }); diff --git a/packages/adt-auth/package.json b/packages/adt-auth/package.json index 5be67d71..e3d2ddea 100644 --- a/packages/adt-auth/package.json +++ b/packages/adt-auth/package.json @@ -7,6 +7,7 @@ "types": "./dist/index.d.mts", "exports": { ".": "./dist/index.mjs", + "./basic": "./dist/basic.mjs", "./plugins/basic": "./dist/plugins/basic.mjs", "./package.json": "./package.json" }, diff --git a/packages/adt-auth/project.json b/packages/adt-auth/project.json new file mode 100644 index 00000000..c3921d0c --- /dev/null +++ b/packages/adt-auth/project.json @@ -0,0 +1,21 @@ +{ + "name": "adt-auth", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/adt-auth/src", + "projectType": "library", + "release": { + "version": { + "manifestRootsToUpdate": ["dist/{projectRoot}"], + "currentVersionResolver": "git-tag", + "fallbackCurrentVersionResolver": "disk" + } + }, + "tags": [], + "targets": { + "nx-release-publish": { + "options": { + "packageRoot": "dist/{projectRoot}" + } + } + } +} diff --git a/packages/adt-auth/src/auth-manager.ts b/packages/adt-auth/src/auth-manager.ts index 55b5c054..bb9312c9 100644 --- a/packages/adt-auth/src/auth-manager.ts +++ b/packages/adt-auth/src/auth-manager.ts @@ -1,14 +1,14 @@ /** * Authentication Manager - * + * * Single source of truth for authentication across all consumers: * - CLI * - MCP Server * - Other tools */ -import type { - AuthSession, +import type { + AuthSession, CookieCredentials, AuthPlugin, AuthPluginOptions, @@ -39,22 +39,26 @@ export class AuthManager { /** * Login using a destination configuration - * + * * Dynamically loads the plugin specified in destination.type and authenticates. - * + * * @param sid - System ID (e.g., 'BHF', 'S0D') * @param destination - Destination config with plugin type and options */ async login(sid: string, destination: Destination): Promise { // Dynamic import of the auth plugin - const pluginModule = await import(destination.type) as { authPlugin: AuthPlugin }; - - if (!pluginModule.authPlugin?.authenticate) { - throw new Error(`Plugin ${destination.type} does not export authPlugin.authenticate`); + const pluginModule = (await import(destination.type)) as { + default?: AuthPlugin; + }; + + if (!pluginModule.default?.authenticate) { + throw new Error( + `Plugin ${destination.type} does not have a default export with authenticate method`, + ); } // Authenticate using the plugin - const result = await pluginModule.authPlugin.authenticate(destination.options); + const result = await pluginModule.default.authenticate(destination.options); // Build session based on result type const session = this.buildSession(sid, destination, result); @@ -73,7 +77,11 @@ export class AuthManager { /** * Build session from plugin result */ - private buildSession(sid: string, destination: Destination, result: AuthPluginResult): AuthSession { + private buildSession( + sid: string, + destination: Destination, + result: AuthPluginResult, + ): AuthSession { if (result.method === 'cookie') { return { sid: sid.toUpperCase(), @@ -187,7 +195,7 @@ export class AuthManager { */ async refreshCredentials( session: AuthSession, - options?: { log?: (message: string) => void } + options?: { log?: (message: string) => void }, ): Promise { const log = options?.log ?? console.log; @@ -196,10 +204,14 @@ export class AuthManager { } // Dynamic import of the auth plugin (expects default export) - const pluginModule = await import(session.auth.plugin) as { default?: AuthPlugin }; + const pluginModule = (await import(session.auth.plugin)) as { + default?: AuthPlugin; + }; if (!pluginModule.default) { - throw new Error(`Plugin ${session.auth.plugin} does not have a default export`); + throw new Error( + `Plugin ${session.auth.plugin} does not have a default export`, + ); } const plugin = pluginModule.default; @@ -225,17 +237,26 @@ export class AuthManager { // Preserve original plugin options (including userDataDir) const destination: Destination = { type: session.auth.plugin, - options: session.auth.pluginOptions || { url: session.host, client: session.client }, + options: session.auth.pluginOptions || { + url: session.host, + client: session.client, + }, }; - const updatedSession = this.buildSession(session.sid, destination, result); + const updatedSession = this.buildSession( + session.sid, + destination, + result, + ); this.saveSession(updatedSession); return updatedSession; } // Refresh failed - fall through to interactive authenticate - log('⚠️ Silent refresh failed - falling back to interactive authentication...'); + log( + '⚠️ Silent refresh failed - falling back to interactive authentication...', + ); } // Fallback: Call authenticate (full re-auth with browser interaction) @@ -275,7 +296,9 @@ export class AuthManager { /** * Get basic auth credentials (convenience method) */ - getBasicAuth(session: AuthSession): { username: string; password: string } | null { + getBasicAuth( + session: AuthSession, + ): { username: string; password: string } | null { if (session.auth.method !== 'basic') { return null; } diff --git a/packages/adt-auth/src/index.ts b/packages/adt-auth/src/index.ts index 3c099fff..47ae8bec 100644 --- a/packages/adt-auth/src/index.ts +++ b/packages/adt-auth/src/index.ts @@ -1,6 +1,6 @@ /** * @abapify/adt-auth - * + * * Authentication package for SAP ADT systems * Single source of truth for session management across all consumers */ @@ -11,6 +11,9 @@ export { AuthManager, type Destination } from './auth-manager'; // Storage export { FileStorage } from './storage/file-storage'; +// Built-in plugins +export { default as basicAuthPlugin } from './plugins/basic'; + // Types - New format (single source of truth) export type { AuthMethod, @@ -26,10 +29,3 @@ export type { BasicAuthResult, ConnectionTestResult, } from './types'; - -// Legacy types (for backward compatibility during migration) -export type { - AuthMethodType, - BasicAuthCredentials, - BasicAuth, -} from './types'; diff --git a/packages/adt-auth/src/plugins/basic.ts b/packages/adt-auth/src/plugins/basic.ts index eb9f7f3d..ae9e664b 100644 --- a/packages/adt-auth/src/plugins/basic.ts +++ b/packages/adt-auth/src/plugins/basic.ts @@ -1,6 +1,6 @@ /** * Built-in Basic Auth Plugin - * + * * Simple username/password authentication * No external dependencies */ @@ -15,10 +15,10 @@ export interface BasicAuthOptions extends AuthPluginOptions { /** * Basic auth plugin - uses provided credentials */ -export const authPlugin: AuthPlugin = { +const authPlugin: AuthPlugin = { async authenticate(options: BasicAuthOptions): Promise { const { username, password } = options; - + if (!username || !password) { throw new Error('Basic auth requires username and password'); } @@ -32,3 +32,5 @@ export const authPlugin: AuthPlugin = { }; }, }; + +export default authPlugin; diff --git a/packages/adt-auth/src/types.ts b/packages/adt-auth/src/types.ts index ce9f6e08..3203d317 100644 --- a/packages/adt-auth/src/types.ts +++ b/packages/adt-auth/src/types.ts @@ -1,6 +1,6 @@ /** * Core types for ADT authentication - * + * * Session format is the single source of truth for all consumers * (CLI, MCP server, other tools) */ @@ -28,8 +28,8 @@ export interface BasicCredentials { * Cookie-based authentication credentials */ export interface CookieCredentials { - cookies: string; // Cookie header value - expiresAt: string; // ISO date string + cookies: string; // Cookie header value + expiresAt: string; // ISO date string } /** @@ -51,8 +51,8 @@ export type Credentials = BasicCredentials | CookieCredentials; */ export interface AuthConfig { method: AuthMethod; - plugin?: string; // e.g., "@abapify/adt-puppeteer" - for refresh - pluginOptions?: AuthPluginOptions; // Original options (url, userDataDir, etc.) + plugin?: string; // e.g., "@abapify/adt-puppeteer" - for refresh + pluginOptions?: AuthPluginOptions; // Original options (url, userDataDir, etc.) credentials: Credentials; } @@ -62,7 +62,7 @@ export interface AuthConfig { /** * Authentication session stored in ~/.adt/sessions/.json - * + * * This is the canonical format used by all consumers: * - CLI * - MCP Server @@ -81,7 +81,7 @@ export interface AuthSession { /** * Auth plugin interface for credential providers - * + * * Plugins are dynamically imported when: * - Initial authentication (login) * - Credential refresh (when expired) @@ -97,7 +97,7 @@ export interface AuthPlugin { export interface AuthPluginOptions { url: string; client?: string; - [key: string]: unknown; // Plugin-specific options + [key: string]: unknown; // Plugin-specific options } /** Cookie-based auth result (from browser SSO plugins) */ @@ -134,26 +134,3 @@ export interface ConnectionTestResult { statusCode?: number; responseTime?: number; } - -// ============================================================================= -// Legacy Types - For backward compatibility during migration -// ============================================================================= - -/** @deprecated Use AuthMethod instead */ -export type AuthMethodType = 'basic' | 'slc' | 'oauth'; - -/** @deprecated Use BasicCredentials instead */ -export interface BasicAuthCredentials { - baseUrl: string; - client?: string; - language?: string; - username: string; - password: string; - insecure?: boolean; -} - -/** @deprecated */ -export interface BasicAuth { - type: 'basic'; - credentials: BasicAuthCredentials; -} diff --git a/packages/adt-auth/tsconfig.json b/packages/adt-auth/tsconfig.json index ca20427a..c23e61c8 100644 --- a/packages/adt-auth/tsconfig.json +++ b/packages/adt-auth/tsconfig.json @@ -1,15 +1,10 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src", - "moduleResolution": "bundler" - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist", "**/*.test.ts"], + "files": [], + "include": [], "references": [ { - "path": "../logger" + "path": "./tsconfig.lib.json" } ] } diff --git a/packages/adt-auth/tsconfig.lib.json b/packages/adt-auth/tsconfig.lib.json new file mode 100644 index 00000000..3566bc6f --- /dev/null +++ b/packages/adt-auth/tsconfig.lib.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.test.ts", "src/**/*.spec.ts"], + "references": [ + { + "path": "../logger" + } + ] +} diff --git a/packages/adt-auth/tsdown.config.ts b/packages/adt-auth/tsdown.config.ts index e14d8ad7..53f5512d 100644 --- a/packages/adt-auth/tsdown.config.ts +++ b/packages/adt-auth/tsdown.config.ts @@ -3,5 +3,10 @@ import baseConfig from '../../tsdown.config.ts'; export default defineConfig({ ...baseConfig, - entry: ['src/index.ts', 'src/plugins/basic.ts'], + entry: { + index: 'src/index.ts', + 'plugins/basic': 'src/plugins/basic.ts', + basic: 'src/plugins/basic.ts', + }, + tsconfig: 'tsconfig.lib.json', }); diff --git a/packages/adt-cli/src/lib/cli.ts b/packages/adt-cli/src/lib/cli.ts index b086d787..2aed7646 100644 --- a/packages/adt-cli/src/lib/cli.ts +++ b/packages/adt-cli/src/lib/cli.ts @@ -9,16 +9,12 @@ import { infoCommand, fetchCommand, getCommand, - outlineCommand, // ATC command moved to @abapify/adt-atc plugin loginCommand, logoutCommand, statusCommand, authListCommand, setDefaultCommand, - createTestLogCommand, - createTestAdtCommand, - createResearchSessionsCommand, createCtsCommand, createReplCommand, packageGetCommand, @@ -26,8 +22,6 @@ import { import { refreshCommand } from './commands/auth/refresh'; // Deploy command moved to @abapify/adt-export plugin // Add '@abapify/adt-export/commands/export' to adt.config.ts commands array to enable -import { createUnlockCommand } from './commands/unlock/index'; -import { createLockCommand } from './commands/lock'; import { createCliLogger, AVAILABLE_COMPONENTS } from './utils/logger-config'; import { setCliContext } from './utils/adt-client-v2'; import { loadCommandPlugins } from './plugin-loader'; @@ -40,7 +34,7 @@ function applyInsecureSslFlag(): void { const authFile = resolve( process.env.HOME || process.env.USERPROFILE || '.', '.adt', - 'auth.json' + 'auth.json', ); if (existsSync(authFile)) { @@ -61,7 +55,7 @@ function addGlobalOptionsHelpToAll(rootProgram: Command): void { .filter( (option) => !option.flags.includes('-h, --help') && - !option.flags.includes('-V, --version') + !option.flags.includes('-V, --version'), ) .map((option) => ` ${option.flags.padEnd(30)} ${option.description}`) .join('\n'); @@ -91,29 +85,30 @@ export async function createCLI(): Promise { .version('1.0.0') .option( '--sid ', - 'SAP System ID (e.g., BHF, S0D) - overrides default system' + 'SAP System ID (e.g., BHF, S0D) - overrides default system', ) .option( '-v, --verbose [components]', `Enable verbose logging. Optionally filter by components: ${AVAILABLE_COMPONENTS.join( - ', ' - )} or 'all'` + ', ', + )} or 'all'`, ) .option( '--log-level ', 'Log level: trace|debug|info|warn|error', - 'info' + 'info', ) .option( '--log-output ', 'Output directory for log files', - './tmp/logs' + './tmp/logs', ) .option( '--log-response-files', 'Save ADT responses as separate files', - false + false, ) + .option('--config ', 'Path to config file (default: adt.config.ts)') .hook('preAction', (thisCommand) => { const opts = thisCommand.optsWithGlobals(); @@ -154,13 +149,10 @@ export async function createCLI(): Promise { // Object inspector command program.addCommand(getCommand); - + // Get subcommands for specific object types getCommand.addCommand(packageGetCommand); - // Object outline command - program.addCommand(outlineCommand); - // ATC (ABAP Test Cockpit) command - now loaded as plugin from @abapify/adt-atc // Add '@abapify/adt-atc/commands/atc' to adt.config.ts commands array to enable @@ -169,7 +161,7 @@ export async function createCLI(): Promise { // CTS commands (v2 client) - replaces old 'transport' command // Use: adt cts search, adt cts get - // TODO: adt cts create, adt cts release, adt cts check + // NOTE: Future commands - adt cts create, adt cts release (via ADK), adt cts check program.addCommand(createCtsCommand()); // Import commands @@ -186,24 +178,15 @@ export async function createCLI(): Promise { // Deploy command moved to @abapify/adt-export plugin // Add '@abapify/adt-export/commands/export' to adt.config.ts commands array to enable - // Lock command - program.addCommand(createLockCommand()); - - // Unlock command - program.addCommand(createUnlockCommand()); - - // Research command - program.addCommand(createResearchSessionsCommand()); - // REPL - Interactive hypermedia navigator program.addCommand(createReplCommand()); - // Test commands for debugging - program.addCommand(createTestLogCommand()); - program.addCommand(createTestAdtCommand()); - - // Load command plugins from config (adt.config.ts) - await loadCommandPlugins(program, process.cwd()); + // Load command plugins from config (adt.config.ts or --config) + // NOTE: We need to parse --config early since plugins must be loaded before parseAsync() + const configArgIndex = process.argv.findIndex((arg) => arg === '--config'); + const configPath = + configArgIndex !== -1 ? process.argv[configArgIndex + 1] : undefined; + await loadCommandPlugins(program, process.cwd(), configPath); // Apply global options help to all commands using afterAll hook addGlobalOptionsHelpToAll(program); diff --git a/packages/adt-cli/src/lib/commands/auth/login.ts b/packages/adt-cli/src/lib/commands/auth/login.ts index 1c397a95..bc1f8940 100644 --- a/packages/adt-cli/src/lib/commands/auth/login.ts +++ b/packages/adt-cli/src/lib/commands/auth/login.ts @@ -7,7 +7,11 @@ import { getAuthManager, } from '../../utils/auth'; import { handleCommandError } from '../../utils/command-helpers'; -import { listDestinations, getDestination, type Destination } from '../../utils/destinations'; +import { + listDestinations, + getDestination, + type Destination, +} from '../../utils/destinations'; interface DestinationOptions { url: string; @@ -22,8 +26,11 @@ interface DestinationChoice { export const loginCommand = new Command('login') .description('Login to ADT - supports Basic Auth and Browser-based SSO') - .option('--insecure', 'Allow insecure SSL connections (ignore certificate errors)') - .action(async function(this: Command, options) { + .option( + '--insecure', + 'Allow insecure SSL connections (ignore certificate errors)', + ) + .action(async function (this: Command, options) { try { // Get SID from global options (--sid is a global option on root program) const globalOpts = this.optsWithGlobals(); @@ -38,7 +45,9 @@ export const loginCommand = new Command('login') // If --sid provided and destination exists in config, use it directly // Case-insensitive match - const matchedSid = configuredDestinations.find(d => d.toUpperCase() === sid); + const matchedSid = configuredDestinations.find( + (d) => d.toUpperCase() === sid, + ); if (sid && matchedSid) { const dest = await getDestination(matchedSid); if (dest) { @@ -52,7 +61,7 @@ export const loginCommand = new Command('login') // Set as default setDefaultSid(sid); - + console.log(`\n✅ Successfully logged in!`); console.log(` System: ${session.sid}`); console.log(` Host: ${session.host}`); @@ -123,7 +132,10 @@ export const loginCommand = new Command('login') } // Collect credentials for basic auth - const pluginOptions = await collectPluginOptions(manualConfig.url, options); + const pluginOptions = await collectPluginOptions( + manualConfig.url, + options, + ); // Authenticate via AuthManager (always uses built-in basic auth for manual flow) console.log(`\n📋 Authenticating to ${sid}...\n`); @@ -144,7 +156,9 @@ export const loginCommand = new Command('login') setDefaultSid(sid); console.log(`💡 ${sid} set as default system`); } else { - console.log(`\n💡 Run "npx adt auth set-default ${sid}" to make it the default system`); + console.log( + `\n💡 Run "npx adt auth set-default ${sid}" to make it the default system`, + ); } } catch (error) { // Handle user cancellation (Ctrl+C) @@ -176,7 +190,7 @@ async function promptForSid(): Promise { */ async function collectPluginOptions( url: string, - commandOptions: any + commandOptions: any, ): Promise { const client = await input({ message: 'Client (optional, e.g., 100)', @@ -208,14 +222,17 @@ async function collectPluginOptions( /** * Prompt for manual configuration (no adt.config.ts) */ -async function promptManualConfig(): Promise<{ pluginType: string; url: string }> { +async function promptManualConfig(): Promise<{ + pluginType: string; + url: string; +}> { // Step 1: Choose authentication method (built-in plugins only) const pluginType = await select({ message: 'Authentication method', choices: [ { name: 'Basic Authentication (username/password)', - value: '@abapify/adt-auth/basic', + value: '@abapify/adt-auth/plugins/basic', description: 'Standard username and password authentication', }, ], diff --git a/packages/adt-cli/src/lib/commands/auth/logout.ts b/packages/adt-cli/src/lib/commands/auth/logout.ts index f8cecc70..473ffd66 100644 --- a/packages/adt-cli/src/lib/commands/auth/logout.ts +++ b/packages/adt-cli/src/lib/commands/auth/logout.ts @@ -1,17 +1,18 @@ import { Command } from 'commander'; import { AuthManager, FileStorage } from '@abapify/adt-auth'; -import { - handleCommandError, -} from '../../utils/command-helpers'; +import { handleCommandError } from '../../utils/command-helpers'; import { getDefaultSid } from '../../utils/auth'; export const logoutCommand = new Command('logout') .description('Logout from ADT') - .option('--sid ', 'System ID to logout from (defaults to current default)') + .option( + '--sid ', + 'System ID to logout from (defaults to current default)', + ) .action(async (options) => { try { const sid = options.sid || getDefaultSid(); - + if (!sid) { console.log('❌ No active session to logout from'); process.exit(1); diff --git a/packages/adt-cli/src/lib/commands/auth/status.ts b/packages/adt-cli/src/lib/commands/auth/status.ts index e7f8fc1a..eb6b3670 100644 --- a/packages/adt-cli/src/lib/commands/auth/status.ts +++ b/packages/adt-cli/src/lib/commands/auth/status.ts @@ -1,11 +1,6 @@ import { Command } from 'commander'; -import { - loadAuthSession, - getDefaultSid, -} from '../../utils/auth'; -import { - handleCommandError, -} from '../../utils/command-helpers'; +import { loadAuthSession, getDefaultSid } from '../../utils/auth'; +import { handleCommandError } from '../../utils/command-helpers'; export const statusCommand = new Command('status') .description('Check authentication status') @@ -43,8 +38,9 @@ export const statusCommand = new Command('status') // Show auth method const authMethodDisplay = - session.auth.method === 'cookie' ? 'Cookie (Browser SSO)' : - 'Basic Auth'; + session.auth.method === 'cookie' + ? 'Cookie (Browser SSO)' + : 'Basic Auth'; console.log(`🔐 Auth Method: ${authMethodDisplay}`); // Show plugin if available @@ -53,9 +49,15 @@ export const statusCommand = new Command('status') } // Show credentials info based on method - if (session.auth.method === 'basic' && 'username' in session.auth.credentials) { + if ( + session.auth.method === 'basic' && + 'username' in session.auth.credentials + ) { console.log(`👤 User: ${session.auth.credentials.username}`); - } else if (session.auth.method === 'cookie' && 'expiresAt' in session.auth.credentials) { + } else if ( + session.auth.method === 'cookie' && + 'expiresAt' in session.auth.credentials + ) { // Show token expiration for cookie auth const expiresAt = new Date(session.auth.credentials.expiresAt); const now = new Date(); @@ -65,19 +67,22 @@ export const statusCommand = new Command('status') console.log('⏱️ Session Status:'); if (isExpired) { - console.log(' Status: ⚠️ Expired (re-authenticate with "npx adt auth login")'); + console.log( + ' Status: ⚠️ Expired (re-authenticate with "npx adt auth login")', + ); console.log(` Expired: ${formatDate(expiresAt)}`); } else { const timeLeft = expiresAt.getTime() - now.getTime(); const hoursLeft = Math.floor(timeLeft / (1000 * 60 * 60)); - const minutesLeft = Math.floor((timeLeft % (1000 * 60 * 60)) / (1000 * 60)); + const minutesLeft = Math.floor( + (timeLeft % (1000 * 60 * 60)) / (1000 * 60), + ); console.log(` Status: ✅ Valid`); console.log(` Expires: ${formatDate(expiresAt)}`); console.log(` Time left: ${hoursLeft}h ${minutesLeft}m`); } } - } catch (error) { handleCommandError(error, 'Status'); } @@ -91,7 +96,6 @@ function formatDate(date: Date): string { hour: '2-digit', minute: '2-digit', second: '2-digit', - hour12: false + hour12: false, }); } - diff --git a/packages/adt-cli/src/lib/commands/cts/search.ts b/packages/adt-cli/src/lib/commands/cts/search.ts index e7ce050a..d9b1881d 100644 --- a/packages/adt-cli/src/lib/commands/cts/search.ts +++ b/packages/adt-cli/src/lib/commands/cts/search.ts @@ -76,7 +76,11 @@ function parseType(type?: string): string | undefined { export const ctsSearchCommand = new Command('search') .description('Search transport requests') .option('-u, --user ', 'Filter by owner (* for all)', '*') - .option('-t, --type ', 'Filter by type: workbench/customizing/copies or K/W/T', '*') + .option( + '-t, --type ', + 'Filter by type: workbench/customizing/copies or K/W/T', + '*', + ) .option('-m, --max ', 'Maximum results to display', '50') .option('--json', 'Output as JSON') .action(async (options) => { @@ -93,9 +97,11 @@ export const ctsSearchCommand = new Command('search') // Build filter description for output const filterParts: string[] = []; if (params.user !== '*') filterParts.push(`user=${params.user}`); - if (params.trfunction !== '*') filterParts.push(`type=${params.trfunction}`); + if (params.trfunction !== '*') + filterParts.push(`type=${params.trfunction}`); - const filterDesc = filterParts.length > 0 ? ` (${filterParts.join(', ')})` : ''; + const filterDesc = + filterParts.length > 0 ? ` (${filterParts.join(', ')})` : ''; console.log(`🔍 Searching transports${filterDesc}...`); // Call the API via adt.cts.transports.find @@ -113,30 +119,40 @@ export const ctsSearchCommand = new Command('search') console.log('\n📭 No transports found matching the criteria'); } else { // Group by status for display - const modifiable = displayTransports.filter((t: CtsReqHeader) => t.TRSTATUS === 'D'); - const released = displayTransports.filter((t: CtsReqHeader) => t.TRSTATUS === 'R'); + const modifiable = displayTransports.filter( + (t: CtsReqHeader) => t.TRSTATUS === 'D', + ); + const released = displayTransports.filter( + (t: CtsReqHeader) => t.TRSTATUS === 'R', + ); const other = displayTransports.filter( - (t: CtsReqHeader) => t.TRSTATUS !== 'D' && t.TRSTATUS !== 'R' + (t: CtsReqHeader) => t.TRSTATUS !== 'D' && t.TRSTATUS !== 'R', ); if (modifiable.length > 0) { console.log(`\n📂 Modifiable (${modifiable.length})`); - modifiable.forEach((tr: CtsReqHeader, i: number) => formatTransport(tr, i, modifiable.length)); + modifiable.forEach((tr: CtsReqHeader, i: number) => + formatTransport(tr, i, modifiable.length), + ); } if (released.length > 0) { console.log(`\n📁 Released (${released.length})`); - released.forEach((tr: CtsReqHeader, i: number) => formatTransport(tr, i, released.length)); + released.forEach((tr: CtsReqHeader, i: number) => + formatTransport(tr, i, released.length), + ); } if (other.length > 0) { console.log(`\n📋 Other (${other.length})`); - other.forEach((tr: CtsReqHeader, i: number) => formatTransport(tr, i, other.length)); + other.forEach((tr: CtsReqHeader, i: number) => + formatTransport(tr, i, other.length), + ); } if (transports.length > maxResults) { console.log( - `\n💡 Showing ${maxResults} of ${transports.length} transports (use --max to see more)` + `\n💡 Showing ${maxResults} of ${transports.length} transports (use --max to see more)`, ); } } @@ -146,7 +162,7 @@ export const ctsSearchCommand = new Command('search') } catch (error) { console.error( '❌ Search failed:', - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); process.exit(1); } diff --git a/packages/adt-cli/src/lib/commands/cts/tr/create.ts b/packages/adt-cli/src/lib/commands/cts/tr/create.ts index 002cbfcd..4be41b81 100644 --- a/packages/adt-cli/src/lib/commands/cts/tr/create.ts +++ b/packages/adt-cli/src/lib/commands/cts/tr/create.ts @@ -42,7 +42,7 @@ const TYPE_NAMES: Record = { * Interactive prompts for transport creation */ async function promptForOptions( - existingOptions: Partial + existingOptions: Partial, ): Promise { // Description is required const description = @@ -116,7 +116,11 @@ function displayResult(tr: AdkTransportRequest): void { export const ctsCreateCommand = new Command('create') .description('Create a new transport request') .option('-d, --description ', 'Transport description') - .option('-t, --type ', 'Transport type: K (Workbench) or W (Customizing)', 'K') + .option( + '-t, --type ', + 'Transport type: K (Workbench) or W (Customizing)', + 'K', + ) .option('--target ', 'Target system', 'LOCAL') .option('--project ', 'CTS project') .option('--no-interactive', 'Skip interactive prompts (requires -d)') @@ -128,7 +132,8 @@ export const ctsCreateCommand = new Command('create') let createOptions: TransportCreateInput; // Determine if we should use interactive mode - const useInteractive = options.interactive !== false && !options.description; + const useInteractive = + options.interactive !== false && !options.description; if (useInteractive) { console.log('🚚 Create Transport Request\n'); @@ -156,7 +161,9 @@ export const ctsCreateCommand = new Command('create') // Show what we're creating if (!options.json) { - console.log(`\n🔄 Creating ${TYPE_NAMES[createOptions.type || 'K']}...`); + console.log( + `\n🔄 Creating ${TYPE_NAMES[createOptions.type || 'K']}...`, + ); console.log(` Description: "${createOptions.description}"`); console.log(` Target: ${createOptions.target}`); if (createOptions.project) { @@ -166,31 +173,43 @@ export const ctsCreateCommand = new Command('create') // Create the transport via ADK layer // ADK expects (options, ctx?) - ctx is AdkContext with client property - const tr = await AdkTransportRequest.create({ - description: createOptions.description, - type: createOptions.type as 'K' | 'W', - target: createOptions.target, - project: createOptions.project, - owner: createOptions.owner, - }, { client }); + const tr = await AdkTransportRequest.create( + { + description: createOptions.description, + type: createOptions.type as 'K' | 'W', + target: createOptions.target, + project: createOptions.project, + owner: createOptions.owner, + }, + { client }, + ); if (options.json) { - console.log(JSON.stringify({ - transport: tr.number, - description: tr.description, - type: tr.type, - target: tr.target, - owner: tr.owner, - status: tr.statusText, - tasks: tr.tasks.map(t => ({ number: t.number, owner: t.owner })), - }, null, 2)); + console.log( + JSON.stringify( + { + transport: tr.number, + description: tr.description, + type: tr.type, + target: tr.target, + owner: tr.owner, + status: tr.statusText, + tasks: tr.tasks.map((t) => ({ + number: t.number, + owner: t.owner, + })), + }, + null, + 2, + ), + ); } else { displayResult(tr); } } catch (error) { console.error( '❌ Transport creation failed:', - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); process.exit(1); } diff --git a/packages/adt-cli/src/lib/commands/cts/tr/index.ts b/packages/adt-cli/src/lib/commands/cts/tr/index.ts index 55b7ccf0..8b2f3759 100644 --- a/packages/adt-cli/src/lib/commands/cts/tr/index.ts +++ b/packages/adt-cli/src/lib/commands/cts/tr/index.ts @@ -1,6 +1,6 @@ /** * Transport Request (TR) Commands - * + * * Subcommands for transport request operations: * - adt cts tr list - List transports * - adt cts tr get - Get transport details @@ -20,8 +20,7 @@ import { ctsDeleteCommand } from './delete'; import { ctsReleaseCommand } from './release'; export function createTrCommand(): Command { - const trCmd = new Command('tr') - .description('Transport request operations'); + const trCmd = new Command('tr').description('Transport request operations'); trCmd.addCommand(ctsListCommand); trCmd.addCommand(ctsGetCommand); @@ -29,7 +28,7 @@ export function createTrCommand(): Command { trCmd.addCommand(ctsSetCommand); trCmd.addCommand(ctsDeleteCommand); trCmd.addCommand(ctsReleaseCommand); - // TODO: trCmd.addCommand(ctsCheckCommand); + // NOTE: ctsCheckCommand not yet implemented (check endpoint not available) return trCmd; } diff --git a/packages/adt-cli/src/lib/commands/cts/tr/list.ts b/packages/adt-cli/src/lib/commands/cts/tr/list.ts index d31205c6..08d62b92 100644 --- a/packages/adt-cli/src/lib/commands/cts/tr/list.ts +++ b/packages/adt-cli/src/lib/commands/cts/tr/list.ts @@ -1,6 +1,6 @@ /** * adt cts tr list - List transport requests - * + * * Uses v2 client service layer for transport operations. */ @@ -35,20 +35,29 @@ export const ctsListCommand = new Command('list') console.log('📭 No transports found'); } else { console.log(`📋 Found ${transports.length} transports`); - + for (const tr of displayTransports) { const status = tr.status === 'D' ? '📂' : '📁'; - console.log(`${status} ${tr.number} - ${tr.desc || '(no description)'}`); - console.log(` Owner: ${tr.owner || 'unknown'} | Status: ${tr.status || 'unknown'}`); + console.log( + `${status} ${tr.number} - ${tr.desc || '(no description)'}`, + ); + console.log( + ` Owner: ${tr.owner || 'unknown'} | Status: ${tr.status || 'unknown'}`, + ); } if (transports.length > maxResults) { - console.log(`\n💡 Showing ${maxResults} of ${transports.length} (use --max to see more)`); + console.log( + `\n💡 Showing ${maxResults} of ${transports.length} (use --max to see more)`, + ); } } } } catch (error) { - console.error('❌ List failed:', error instanceof Error ? error.message : String(error)); + console.error( + '❌ List failed:', + error instanceof Error ? error.message : String(error), + ); process.exit(1); } }); diff --git a/packages/adt-cli/src/lib/commands/cts/tr/release.ts b/packages/adt-cli/src/lib/commands/cts/tr/release.ts index 5b8b4496..4dfb3201 100644 --- a/packages/adt-cli/src/lib/commands/cts/tr/release.ts +++ b/packages/adt-cli/src/lib/commands/cts/tr/release.ts @@ -30,7 +30,9 @@ export const ctsReleaseCommand = new Command('release') const verboseFlag = globalOpts.verbose ?? ctx.verbose ?? false; const compact = !verboseFlag; const logger = - (this as any).logger ?? ctx.logger ?? createCliLogger({ verbose: verboseFlag }); + (this as any).logger ?? + ctx.logger ?? + createCliLogger({ verbose: verboseFlag }); const progress = createProgressReporter({ compact, logger }); try { @@ -39,7 +41,7 @@ export const ctsReleaseCommand = new Command('release') // Step 1: Get transport via ADK progress.step(`🔍 Getting transport ${transport}...`); // ADK expects (number, ctx?) - ctx is AdkContext with client property - + let tr: AdkTransportRequest; try { tr = await AdkTransportRequest.get(transport, { client }); @@ -54,7 +56,9 @@ export const ctsReleaseCommand = new Command('release') if (tr.status === 'R') { console.log(`ℹ️ Transport ${transport} is already released`); if (options.json) { - console.log(JSON.stringify({ transport, status: 'already_released' }, null, 2)); + console.log( + JSON.stringify({ transport, status: 'already_released' }, null, 2), + ); } process.exit(0); } @@ -64,17 +68,21 @@ export const ctsReleaseCommand = new Command('release') console.log(`\n📋 Transport: ${tr.number}`); console.log(` Description: ${tr.description || '-'}`); console.log(` Owner: ${tr.owner || '-'}`); - console.log(` Target: ${tr.targetDescription || tr.target || 'LOCAL'}`); + console.log( + ` Target: ${tr.targetDescription || tr.target || 'LOCAL'}`, + ); console.log(` Status: ${tr.statusText}`); console.log(` Tasks: ${tr.tasks.length}`); console.log(` Objects: ${tr.objects.length}`); } - // Step 2: Pre-release check (TODO: implement when check endpoint is available) + // Step 2: Pre-release check (not yet implemented - check endpoint not available) if (!options.skipCheck) { // For now, just warn that checks are not implemented if (!options.json) { - console.log('\n💡 Pre-release checks not yet implemented (use --skip-check to suppress)'); + console.log( + '\n💡 Pre-release checks not yet implemented (use --skip-check to suppress)', + ); } } @@ -93,7 +101,7 @@ export const ctsReleaseCommand = new Command('release') // Step 4: Release the transport using ADK progress.step(`🚀 Releasing transport ${transport}...`); - + let result; if (options.releaseAll) { // Release all tasks first, then the transport @@ -111,14 +119,22 @@ export const ctsReleaseCommand = new Command('release') } if (options.json) { - console.log(JSON.stringify({ - transport, - status: 'released', - result, - }, null, 2)); + console.log( + JSON.stringify( + { + transport, + status: 'released', + result, + }, + null, + 2, + ), + ); } else { console.log(`\n✅ Transport ${transport} released successfully!`); - console.log(` Target: ${tr.targetDescription || tr.target || 'LOCAL'}`); + console.log( + ` Target: ${tr.targetDescription || tr.target || 'LOCAL'}`, + ); } } catch (error) { const message = error instanceof Error ? error.message : String(error); diff --git a/packages/adt-cli/src/lib/commands/cts/tr/set.ts b/packages/adt-cli/src/lib/commands/cts/tr/set.ts index b21e8e04..dea23b5a 100644 --- a/packages/adt-cli/src/lib/commands/cts/tr/set.ts +++ b/packages/adt-cli/src/lib/commands/cts/tr/set.ts @@ -30,7 +30,9 @@ export const ctsSetCommand = new Command('set') const verboseFlag = globalOpts.verbose ?? ctx.verbose ?? false; const compact = !verboseFlag; const logger = - (this as any).logger ?? ctx.logger ?? createCliLogger({ verbose: verboseFlag }); + (this as any).logger ?? + ctx.logger ?? + createCliLogger({ verbose: verboseFlag }); const progress = createProgressReporter({ compact, logger }); try { @@ -57,7 +59,9 @@ export const ctsSetCommand = new Command('set') target: json.target, }; } catch (err) { - console.error(`❌ Failed to load JSON file: ${err instanceof Error ? err.message : String(err)}`); + console.error( + `❌ Failed to load JSON file: ${err instanceof Error ? err.message : String(err)}`, + ); process.exit(1); } } else { @@ -79,12 +83,18 @@ export const ctsSetCommand = new Command('set') progress.done(); if (options.json) { - console.log(JSON.stringify({ - transport, - status: 'updated', - description: tr.description, - target: tr.target, - }, null, 2)); + console.log( + JSON.stringify( + { + transport, + status: 'updated', + description: tr.description, + target: tr.target, + }, + null, + 2, + ), + ); } else { console.log(`✅ Transport ${transport} updated successfully`); if (updateOptions.description) { diff --git a/packages/adt-cli/src/lib/commands/cts/tree/config-set.ts b/packages/adt-cli/src/lib/commands/cts/tree/config-set.ts index 8eb724e3..aaa6dd35 100644 --- a/packages/adt-cli/src/lib/commands/cts/tree/config-set.ts +++ b/packages/adt-cli/src/lib/commands/cts/tree/config-set.ts @@ -27,17 +27,19 @@ function extractConfigId(uri: string): string { function propertiesToMap(config: unknown): Record { const result: Record = {}; if (!config || typeof config !== 'object') return result; - + const configObj = config as Record; - const properties = configObj.properties as Record | undefined; - + const properties = configObj.properties as + | Record + | undefined; + if (!properties) return result; - + const propArray = properties.property; if (!propArray) return result; - + const props = Array.isArray(propArray) ? propArray : [propArray]; - + for (const prop of props) { if (prop && typeof prop === 'object') { const p = prop as Record; @@ -60,7 +62,7 @@ function buildConfigurationData(properties: Record) { isMandatory: undefined, $text: value, })); - + return { properties: { property: propertyArray, @@ -69,14 +71,19 @@ function buildConfigurationData(properties: Record) { } export const treeConfigSetCommand = new Command('set') - .description('Update search configuration (only specified options are changed)') + .description( + 'Update search configuration (only specified options are changed)', + ) .option('-u, --user ', 'Filter by user (use * for all users)') .option('--workbench ', 'Include workbench requests (true/false)') .option('--customizing ', 'Include customizing requests (true/false)') .option('--copies ', 'Include transport of copies (true/false)') .option('--modifiable ', 'Include modifiable requests (true/false)') .option('--released ', 'Include released requests (true/false)') - .option('--date-filter ', 'Date filter preset (0=Week, 1=2Weeks, 2=4Weeks, 3=3Months, 4=Custom, 5=All)') + .option( + '--date-filter ', + 'Date filter preset (0=Week, 1=2Weeks, 2=4Weeks, 3=3Months, 4=Custom, 5=All)', + ) .option('--from-date ', 'From date (YYYY-MM-DD or YYYYMMDD)') .option('--to-date ', 'To date (YYYY-MM-DD or YYYYMMDD)') .action(async (options) => { @@ -84,7 +91,8 @@ export const treeConfigSetCommand = new Command('set') const client = await getAdtClientV2(); // Check if any option was provided - const hasOptions = options.user !== undefined || + const hasOptions = + options.user !== undefined || options.workbench !== undefined || options.customizing !== undefined || options.copies !== undefined || @@ -95,22 +103,29 @@ export const treeConfigSetCommand = new Command('set') options.toDate !== undefined; if (!hasOptions) { - console.log('💡 No options specified. Use --help to see available options.'); + console.log( + '💡 No options specified. Use --help to see available options.', + ); console.log('\nExamples:'); console.log(' npx adt cts tree config set --user=PPLENKOV'); console.log(' npx adt cts tree config set --user=* --workbench=true'); - console.log(' npx adt cts tree config set --released=true --date-filter=3'); + console.log( + ' npx adt cts tree config set --released=true --date-filter=3', + ); return; } console.log('🔍 Fetching current configuration...'); // Get configurations list - const configsResponse = await client.adt.cts.transportrequests.searchconfiguration.configurations.get(); - + const configsResponse = + await client.adt.cts.transportrequests.searchconfiguration.configurations.get(); + // Response has 'configurations' property (plural) containing config array const configsData = configsResponse as { configurations?: unknown }; - const configs = configsData?.configurations as Array<{ link?: { href?: string } }> | undefined; + const configs = configsData?.configurations as + | Array<{ link?: { href?: string } }> + | undefined; if (!configs) { console.log('\n❌ No search configuration found'); return; @@ -132,7 +147,10 @@ export const treeConfigSetCommand = new Command('set') // Fetch current config details const configId = extractConfigId(configUri); - const configDetails = await client.adt.cts.transportrequests.searchconfiguration.configurations.getById(configId); + const configDetails = + await client.adt.cts.transportrequests.searchconfiguration.configurations.getById( + configId, + ); const currentProps = propertiesToMap(configDetails); // Apply changes - only update what was specified @@ -143,23 +161,40 @@ export const treeConfigSetCommand = new Command('set') console.log(` 📝 User: ${options.user}`); } if (options.workbench !== undefined) { - newProps.WorkbenchRequests = options.workbench === 'true' || options.workbench === true ? 'true' : 'false'; + newProps.WorkbenchRequests = + options.workbench === 'true' || options.workbench === true + ? 'true' + : 'false'; console.log(` 📝 WorkbenchRequests: ${newProps.WorkbenchRequests}`); } if (options.customizing !== undefined) { - newProps.CustomizingRequests = options.customizing === 'true' || options.customizing === true ? 'true' : 'false'; - console.log(` 📝 CustomizingRequests: ${newProps.CustomizingRequests}`); + newProps.CustomizingRequests = + options.customizing === 'true' || options.customizing === true + ? 'true' + : 'false'; + console.log( + ` 📝 CustomizingRequests: ${newProps.CustomizingRequests}`, + ); } if (options.copies !== undefined) { - newProps.TransportOfCopies = options.copies === 'true' || options.copies === true ? 'true' : 'false'; + newProps.TransportOfCopies = + options.copies === 'true' || options.copies === true + ? 'true' + : 'false'; console.log(` 📝 TransportOfCopies: ${newProps.TransportOfCopies}`); } if (options.modifiable !== undefined) { - newProps.Modifiable = options.modifiable === 'true' || options.modifiable === true ? 'true' : 'false'; + newProps.Modifiable = + options.modifiable === 'true' || options.modifiable === true + ? 'true' + : 'false'; console.log(` 📝 Modifiable: ${newProps.Modifiable}`); } if (options.released !== undefined) { - newProps.Released = options.released === 'true' || options.released === true ? 'true' : 'false'; + newProps.Released = + options.released === 'true' || options.released === true + ? 'true' + : 'false'; console.log(` 📝 Released: ${newProps.Released}`); } if (options.dateFilter !== undefined) { @@ -180,17 +215,21 @@ export const treeConfigSetCommand = new Command('set') // Save configuration console.log('\n🔄 Saving configuration...'); const configData = buildConfigurationData(newProps); - - // Cast to unknown to bypass schema mismatch - TODO: align schema with actual API + + // Cast to unknown to bypass schema mismatch - schema alignment pending await client.adt.cts.transportrequests.searchconfiguration.configurations.put( configId, - configData as unknown as Parameters[1] + configData as unknown as Parameters< + typeof client.adt.cts.transportrequests.searchconfiguration.configurations.put + >[1], ); console.log('✅ Configuration updated successfully'); - } catch (error) { - console.error('❌ Failed:', error instanceof Error ? error.message : String(error)); + console.error( + '❌ Failed:', + error instanceof Error ? error.message : String(error), + ); process.exit(1); } }); diff --git a/packages/adt-cli/src/lib/commands/cts/tree/config.ts b/packages/adt-cli/src/lib/commands/cts/tree/config.ts index ea4353ab..36f85d9d 100644 --- a/packages/adt-cli/src/lib/commands/cts/tree/config.ts +++ b/packages/adt-cli/src/lib/commands/cts/tree/config.ts @@ -14,7 +14,10 @@ import { Command } from 'commander'; import { render } from 'ink'; import React from 'react'; import { getAdtClientV2 } from '../../../utils/adt-client-v2'; -import { TreeConfigEditor, type TreeConfigState } from '../../../components/TreeConfigEditor'; +import { + TreeConfigEditor, + type TreeConfigState, +} from '../../../components/TreeConfigEditor'; import { treeConfigSetCommand } from './config-set'; // Date filter preset names @@ -50,17 +53,19 @@ function extractConfigId(uri: string): string { function propertiesToMap(config: unknown): Record { const result: Record = {}; if (!config || typeof config !== 'object') return result; - + const configObj = config as Record; - const properties = configObj.properties as Record | undefined; - + const properties = configObj.properties as + | Record + | undefined; + if (!properties) return result; - + const propArray = properties.property; if (!propArray) return result; - + const props = Array.isArray(propArray) ? propArray : [propArray]; - + for (const prop of props) { if (prop && typeof prop === 'object') { const p = prop as Record; @@ -80,7 +85,7 @@ function propertiesToMap(config: unknown): Record { */ function propertiesToConfigState( properties: Record, - _configDetails: unknown + _configDetails: unknown, ): TreeConfigState { return { userName: (properties.User || '*') as string, @@ -108,21 +113,41 @@ function configStateToConfigurationData(config: TreeConfigState) { // Convert date format YYYY-MM-DD to YYYYMMDD const fromDate = config.fromDate.replace(/-/g, ''); const toDate = config.toDate.replace(/-/g, ''); - + // Build properties array matching the schema structure // Each property needs: key, isMandatory (optional attribute), $text (text content) const properties = [ { key: 'User', isMandatory: undefined, $text: config.userName }, - { key: 'WorkbenchRequests', isMandatory: undefined, $text: String(config.workbenchRequests) }, - { key: 'CustomizingRequests', isMandatory: undefined, $text: String(config.customizingRequests) }, - { key: 'TransportOfCopies', isMandatory: undefined, $text: String(config.transportOfCopies) }, - { key: 'Modifiable', isMandatory: undefined, $text: String(config.modifiable) }, + { + key: 'WorkbenchRequests', + isMandatory: undefined, + $text: String(config.workbenchRequests), + }, + { + key: 'CustomizingRequests', + isMandatory: undefined, + $text: String(config.customizingRequests), + }, + { + key: 'TransportOfCopies', + isMandatory: undefined, + $text: String(config.transportOfCopies), + }, + { + key: 'Modifiable', + isMandatory: undefined, + $text: String(config.modifiable), + }, { key: 'Released', isMandatory: undefined, $text: String(config.released) }, - { key: 'DateFilter', isMandatory: undefined, $text: config.releasedDateFilter }, + { + key: 'DateFilter', + isMandatory: undefined, + $text: config.releasedDateFilter, + }, { key: 'FromDate', isMandatory: undefined, $text: fromDate }, { key: 'ToDate', isMandatory: undefined, $text: toDate }, ]; - + return { properties: { property: properties, @@ -135,7 +160,7 @@ function configStateToConfigurationData(config: TreeConfigState) { */ async function launchEditor( initialConfig: TreeConfigState, - onSave: (config: TreeConfigState) => Promise + onSave: (config: TreeConfigState) => Promise, ): Promise { return new Promise((resolve, reject) => { let savedConfig: TreeConfigState | null = null; @@ -154,7 +179,7 @@ async function launchEditor( initialConfig, onSave: handleSave, onCancel: handleCancel, - }) + }), ); waitUntilExit().then(async () => { @@ -164,7 +189,7 @@ async function launchEditor( // Move cursor up ~20 lines (TUI height) and clear from cursor to end of screen const tuiHeight = 20; process.stdout.write(`\x1b[${tuiHeight}A\x1b[J`); - + if (savedConfig) { try { await onSave(savedConfig); @@ -196,11 +221,14 @@ export const treeConfigCommand = new Command('config') } // Get configurations list (typed) - const configsResponse = await client.adt.cts.transportrequests.searchconfiguration.configurations.get(); - + const configsResponse = + await client.adt.cts.transportrequests.searchconfiguration.configurations.get(); + // Response has 'configurations' property (plural) containing config array const configsData = configsResponse as { configurations?: unknown }; - const configs = configsData?.configurations as Array<{ link?: { href?: string } }> | undefined; + const configs = configsData?.configurations as + | Array<{ link?: { href?: string } }> + | undefined; if (!configs) { console.log('\n📭 No search configuration found'); return; @@ -222,13 +250,22 @@ export const treeConfigCommand = new Command('config') // Extract config ID and fetch details using typed contract const configId = extractConfigId(configUri); - const configDetailsRaw = await client.adt.cts.transportrequests.searchconfiguration.configurations.getById(configId); - + const configDetailsRaw = + await client.adt.cts.transportrequests.searchconfiguration.configurations.getById( + configId, + ); + // Response has nested structure - extract configuration object // Cast to expected shape for property access type ConfigDetails = { configuration?: { - properties?: { property?: Array<{ key?: string; _text?: string; isMandatory?: boolean }> }; + properties?: { + property?: Array<{ + key?: string; + _text?: string; + isMandatory?: boolean; + }>; + }; createdBy?: string; createdAt?: string; changedBy?: string; @@ -238,26 +275,33 @@ export const treeConfigCommand = new Command('config') const configDetails = (configDetailsRaw as ConfigDetails)?.configuration; // Convert properties to map for easy access - const properties = propertiesToMap(configDetails as Record); + const properties = propertiesToMap( + configDetails as Record, + ); // Edit mode - launch interactive editor if (options.edit) { - const initialConfig = propertiesToConfigState(properties, configDetails); + const initialConfig = propertiesToConfigState( + properties, + configDetails, + ); // Save handler - updates the configuration on the server using typed contract const handleSave = async (newConfig: TreeConfigState) => { console.log('\n🔄 Saving configuration...'); - + // Convert config to schema-compatible format const configData = configStateToConfigurationData(newConfig); - + // PUT the configuration back using the typed contract // Body type is Partial - we only send properties // Note: CSRF token is auto-initialized by the adapter before write operations - // Cast to unknown to bypass schema mismatch - TODO: align schema with actual API + // Cast to unknown to bypass schema mismatch - schema alignment pending await client.adt.cts.transportrequests.searchconfiguration.configurations.put( configId, - configData as unknown as Parameters[1] + configData as unknown as Parameters< + typeof client.adt.cts.transportrequests.searchconfiguration.configurations.put + >[1], ); }; @@ -317,7 +361,8 @@ export const treeConfigCommand = new Command('config') // Date Range console.log('\n📅 Date Range:'); - const datePreset = DATE_FILTER_PRESETS[properties.DateFilter] || 'Unknown'; + const datePreset = + DATE_FILTER_PRESETS[properties.DateFilter] || 'Unknown'; console.log(` Preset: ${datePreset}`); if (properties.FromDate) { console.log(` From: ${formatDate(properties.FromDate)}`); @@ -327,13 +372,14 @@ export const treeConfigCommand = new Command('config') } console.log('\n' + '═'.repeat(50)); - console.log('💡 Configure in ADT Eclipse: Transport Organizer → Configure Tree'); + console.log( + '💡 Configure in ADT Eclipse: Transport Organizer → Configure Tree', + ); } - } catch (error) { console.error( '❌ Failed:', - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); process.exit(1); } diff --git a/packages/adt-cli/src/lib/commands/discovery.ts b/packages/adt-cli/src/lib/commands/discovery.ts index 3586172a..e5e6f96e 100644 --- a/packages/adt-cli/src/lib/commands/discovery.ts +++ b/packages/adt-cli/src/lib/commands/discovery.ts @@ -8,7 +8,7 @@ export const discoveryCommand = new Command('discovery') .description('Discover available ADT services') .option( '-o, --output ', - 'Save discovery data to file (JSON or XML based on extension)' + 'Save discovery data to file (JSON or XML based on extension)', ) .option('-f, --filter ', 'Filter workspaces by title') .action(async (options, command) => { @@ -52,7 +52,7 @@ export const discoveryCommand = new Command('discovery') } catch (error) { console.error( '❌ Discovery failed:', - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); process.exit(1); } diff --git a/packages/adt-cli/src/lib/commands/get.ts b/packages/adt-cli/src/lib/commands/get.ts index 6f808cba..0fa9495b 100644 --- a/packages/adt-cli/src/lib/commands/get.ts +++ b/packages/adt-cli/src/lib/commands/get.ts @@ -27,21 +27,34 @@ export const getCommand = new Command('get') const client = await getAdtClientV2(); // Step 1: Search for the object - const searchResult = await client.adt.repository.informationsystem.search.quickSearch({ - query: objectName, - maxResults: 10, - }); + const searchResult = + await client.adt.repository.informationsystem.search.quickSearch({ + query: objectName, + maxResults: 10, + }); // Handle union type - objectReference may be array or single object - const rawObjects = 'objectReference' in searchResult ? searchResult.objectReference : []; - const objects = Array.isArray(rawObjects) ? rawObjects : rawObjects ? [rawObjects] : []; + const rawObjects = + 'objectReference' in searchResult ? searchResult.objectReference : []; + const objects = Array.isArray(rawObjects) + ? rawObjects + : rawObjects + ? [rawObjects] + : []; // Define object type for type safety - type SearchObject = { name?: string; type?: string; uri?: string; description?: string; packageName?: string }; + type SearchObject = { + name?: string; + type?: string; + uri?: string; + description?: string; + packageName?: string; + }; // Find exact match const exactMatch = objects.find( - (obj: SearchObject) => String(obj.name || '').toUpperCase() === objectName.toUpperCase() + (obj: SearchObject) => + String(obj.name || '').toUpperCase() === objectName.toUpperCase(), ); if (!exactMatch) { @@ -49,7 +62,9 @@ export const getCommand = new Command('get') // Show similar objects if any const similar = objects.filter((obj: SearchObject) => - String(obj.name || '').toUpperCase().includes(objectName.toUpperCase()) + String(obj.name || '') + .toUpperCase() + .includes(objectName.toUpperCase()), ); if (similar.length > 0) { @@ -69,7 +84,9 @@ export const getCommand = new Command('get') if (route) { try { // Fetch full object data using route's fetch function - const data = await route.fetch(client, { name: String(exactMatch.name || objectName) }); + const data = await route.fetch(client, { + name: String(exactMatch.name || objectName), + }); // JSON output if (options.json) { @@ -86,7 +103,8 @@ export const getCommand = new Command('get') // If fetch fails (e.g., 404 for non-package), fall through to generic const is404 = fetchError instanceof Error && - (fetchError.message.includes('404') || fetchError.message.includes('Not Found')); + (fetchError.message.includes('404') || + fetchError.message.includes('Not Found')); if (!is404) { throw fetchError; } @@ -110,7 +128,7 @@ export const getCommand = new Command('get') } catch (error) { console.error( `❌ Get failed:`, - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); process.exit(1); } diff --git a/packages/adt-cli/src/lib/commands/import/package.ts b/packages/adt-cli/src/lib/commands/import/package.ts index 3626ee11..5abbb7a5 100644 --- a/packages/adt-cli/src/lib/commands/import/package.ts +++ b/packages/adt-cli/src/lib/commands/import/package.ts @@ -10,17 +10,17 @@ export const importPackageCommand = new Command('package') .option( '-o, --output ', 'Output directory (overrides targetFolder)', - '' + '', ) .option( '-t, --object-types ', - 'Comma-separated object types (e.g., CLAS,INTF,DDLS). Default: all supported by format' + 'Comma-separated object types (e.g., CLAS,INTF,DDLS). Default: all supported by format', ) .option('--sub-packages', 'Include subpackages', false) .option( '--format ', 'Output format: oat | abapgit | @abapify/oat | @abapify/abapgit', - 'oat' + 'oat', ) .option('--debug', 'Enable debug output', false) .action(async (packageName, targetFolder, options) => { @@ -60,7 +60,9 @@ export const importPackageCommand = new Command('package') console.log(`\n✅ Package import complete!`); console.log(`📦 Package: ${result.packageName}`); console.log(`📝 Description: ${result.description}`); - console.log(`📊 Results: ${result.results.success} success, ${result.results.skipped} skipped, ${result.results.failed} failed`); + console.log( + `📊 Results: ${result.results.success} success, ${result.results.skipped} skipped, ${result.results.failed} failed`, + ); // Show object type breakdown if (Object.keys(result.objectsByType).length > 0) { @@ -73,10 +75,38 @@ export const importPackageCommand = new Command('package') console.log(`\n✨ Files written to: ${result.outputPath}`); } catch (error) { - console.error( - `❌ Import failed:`, - error instanceof Error ? error.message : String(error) - ); + const errorMsg = error instanceof Error ? error.message : String(error); + const errorCode = + error instanceof Error && 'code' in error + ? (error as any).code + : 'UNKNOWN'; + const errorStatus = + error instanceof Error && 'status' in error + ? (error as any).status + : ''; + const cause = + error instanceof Error && 'cause' in error + ? (error as any).cause + : null; + + console.error(`❌ Import failed: ${errorMsg}`); + if (errorCode && errorCode !== 'UNKNOWN') { + console.error(` Error code: ${errorCode}`); + } + if (errorStatus) { + console.error(` HTTP status: ${errorStatus}`); + } + if (cause) { + const causeMsg = cause instanceof Error ? cause.message : String(cause); + const causeCode = + cause instanceof Error && 'code' in cause ? (cause as any).code : ''; + console.error( + ` Cause: ${causeMsg}${causeCode ? ` (${causeCode})` : ''}`, + ); + } + if (error instanceof Error && error.stack) { + console.error(` Stack: ${error.stack}`); + } process.exit(1); } }); diff --git a/packages/adt-cli/src/lib/commands/import/transport.ts b/packages/adt-cli/src/lib/commands/import/transport.ts index 0977c483..0c591a53 100644 --- a/packages/adt-cli/src/lib/commands/import/transport.ts +++ b/packages/adt-cli/src/lib/commands/import/transport.ts @@ -10,16 +10,16 @@ export const importTransportCommand = new Command('transport') .option( '-o, --output ', 'Output directory (overrides targetFolder)', - '' + '', ) .option( '-t, --object-types ', - 'Comma-separated object types (e.g., CLAS,INTF,DDLS). Default: all supported by format' + 'Comma-separated object types (e.g., CLAS,INTF,DDLS). Default: all supported by format', ) .option( '--format ', 'Output format: abapgit | oat | @abapify/abapgit | @abapify/oat', - 'abapgit' + 'abapgit', ) .option('--debug', 'Enable debug output', false) .action(async (transportNumber, targetFolder, options) => { @@ -58,7 +58,9 @@ export const importTransportCommand = new Command('transport') console.log(`\n✅ Transport import complete!`); console.log(`📦 Transport: ${result.transportNumber}`); console.log(`📝 Description: ${result.description}`); - console.log(`📊 Results: ${result.results.success} success, ${result.results.skipped} skipped, ${result.results.failed} failed`); + console.log( + `📊 Results: ${result.results.success} success, ${result.results.skipped} skipped, ${result.results.failed} failed`, + ); // Show object type breakdown if (Object.keys(result.objectsByType).length > 0) { @@ -71,10 +73,38 @@ export const importTransportCommand = new Command('transport') console.log(`\n✨ Files written to: ${result.outputPath}`); } catch (error) { - console.error( - `❌ Import failed:`, - error instanceof Error ? error.message : String(error) - ); + const errorMsg = error instanceof Error ? error.message : String(error); + const errorCode = + error instanceof Error && 'code' in error + ? (error as any).code + : 'UNKNOWN'; + const errorStatus = + error instanceof Error && 'status' in error + ? (error as any).status + : ''; + const cause = + error instanceof Error && 'cause' in error + ? (error as any).cause + : null; + + console.error(`❌ Import failed: ${errorMsg}`); + if (errorCode && errorCode !== 'UNKNOWN') { + console.error(` Error code: ${errorCode}`); + } + if (errorStatus) { + console.error(` HTTP status: ${errorStatus}`); + } + if (cause) { + const causeMsg = cause instanceof Error ? cause.message : String(cause); + const causeCode = + cause instanceof Error && 'code' in cause ? (cause as any).code : ''; + console.error( + ` Cause: ${causeMsg}${causeCode ? ` (${causeCode})` : ''}`, + ); + } + if (error instanceof Error && error.stack) { + console.error(` Stack: ${error.stack}`); + } process.exit(1); } }); diff --git a/packages/adt-cli/src/lib/commands/index.ts b/packages/adt-cli/src/lib/commands/index.ts index 7b2f40b0..ea9b404d 100644 --- a/packages/adt-cli/src/lib/commands/index.ts +++ b/packages/adt-cli/src/lib/commands/index.ts @@ -8,7 +8,6 @@ export { discoveryCommand } from './discovery'; export { infoCommand } from './info'; export { fetchCommand } from './fetch'; export { getCommand } from './get'; -export { outlineCommand } from './outline'; // ATC command moved to @abapify/adt-atc plugin // Add '@abapify/adt-atc/commands/atc' to adt.config.ts commands array to enable export { loginCommand } from './auth/login'; @@ -16,9 +15,6 @@ export { logoutCommand } from './auth/logout'; export { statusCommand } from './auth/status'; export { listCommand as authListCommand } from './auth/list'; export { setDefaultCommand } from './auth/set-default'; -export { createTestLogCommand } from './test-log'; -export { createTestAdtCommand } from './test-adt'; -export { createResearchSessionsCommand } from './research-sessions-cmd'; export { createCtsCommand } from './cts'; export { createReplCommand } from './repl'; export { packageGetCommand } from './package'; diff --git a/packages/adt-cli/src/lib/commands/info.ts b/packages/adt-cli/src/lib/commands/info.ts index f71788db..f4007198 100644 --- a/packages/adt-cli/src/lib/commands/info.ts +++ b/packages/adt-cli/src/lib/commands/info.ts @@ -8,13 +8,15 @@ export const infoCommand = new Command('info') .option('--system', 'Get system information') .option( '-o, --output ', - 'Save data to file (JSON or XML based on extension)' + 'Save data to file (JSON or XML based on extension)', ) .action(async (options) => { try { // If no flags specified, show both - const showSession = options.session || (!options.session && !options.system); - const showSystem = options.system || (!options.session && !options.system); + const showSession = + options.session || (!options.session && !options.system); + const showSystem = + options.system || (!options.session && !options.system); // Capture data for output let capturedData: any = {}; @@ -45,8 +47,16 @@ export const infoCommand = new Command('info') // Fetch system info if (showSystem) { - console.log(showSession ? '\n🔄 Fetching system information...\n' : '🔄 Fetching system information...\n'); - const systemData = await adtClient.adt.core.http.systeminformation.getSystemInfo() as unknown as Record; + console.log( + showSession + ? '\n🔄 Fetching system information...\n' + : '🔄 Fetching system information...\n', + ); + const systemData = + (await adtClient.adt.core.http.systeminformation.getSystemInfo()) as unknown as Record< + string, + unknown + >; capturedData.system = systemData; if (!options.output) { @@ -54,9 +64,10 @@ export const infoCommand = new Command('info') // Display key system properties const displayProperty = (key: string, label: string) => { - if (systemData[key]) console.log(` • ${label}: ${systemData[key]}`); + if (systemData[key]) + console.log(` • ${label}: ${systemData[key]}`); }; - + displayProperty('systemID', 'System ID'); displayProperty('client', 'Client'); displayProperty('userName', 'User'); @@ -65,11 +76,21 @@ export const infoCommand = new Command('info') displayProperty('sapRelease', 'SAP Release'); // Display any other properties - const knownKeys = ['systemID', 'client', 'userName', 'userFullName', 'language', 'release', 'sapRelease']; - const otherKeys = Object.keys(systemData).filter(k => !knownKeys.includes(k)); + const knownKeys = [ + 'systemID', + 'client', + 'userName', + 'userFullName', + 'language', + 'release', + 'sapRelease', + ]; + const otherKeys = Object.keys(systemData).filter( + (k) => !knownKeys.includes(k), + ); if (otherKeys.length > 0) { console.log('\n Additional properties:'); - otherKeys.forEach(key => { + otherKeys.forEach((key) => { console.log(` • ${key}: ${JSON.stringify(systemData[key])}`); }); } @@ -87,10 +108,7 @@ export const infoCommand = new Command('info') } // Save as JSON - writeFileSync( - options.output, - JSON.stringify(capturedData, null, 2) - ); + writeFileSync(options.output, JSON.stringify(capturedData, null, 2)); console.log(`\n💾 Information saved to: ${options.output}`); } @@ -98,7 +116,7 @@ export const infoCommand = new Command('info') } catch (error) { console.error( '❌ Failed to fetch information:', - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); if (error instanceof Error && error.stack) { console.error('\nStack trace:', error.stack); diff --git a/packages/adt-cli/src/lib/commands/lock.ts b/packages/adt-cli/src/lib/commands/lock.ts deleted file mode 100644 index 7d86f400..00000000 --- a/packages/adt-cli/src/lib/commands/lock.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Command } from 'commander'; - -// TODO: Migrate to v2 client when lock/unlock contracts are available -// This command requires v1-specific features: searchObjectsDetailed, lockObject -// See: docs/plans/active/2025-12-20-adt-cli-api-compatibility.md - -async function lockObject(objectName: string): Promise { - // Stub implementation - command needs migration to v2 client - console.error(`❌ Lock command is temporarily disabled pending v2 client migration.`); - console.error(` Object: ${objectName}`); - console.error(`💡 Use SAP GUI transaction SE80 or SM12 to manage locks.`); - process.exit(1); -} - -export function createLockCommand(): Command { - const command = new Command('lock'); - - command - .description('Lock a SAP object by name (temporarily disabled)') - .argument('', 'Name of the object to lock (e.g., ZIF_PETSTORE)') - .action(async (objectName: string) => { - await lockObject(objectName); - }); - - return command; -} diff --git a/packages/adt-cli/src/lib/commands/outline.ts b/packages/adt-cli/src/lib/commands/outline.ts index 4192ed4b..e69de29b 100644 --- a/packages/adt-cli/src/lib/commands/outline.ts +++ b/packages/adt-cli/src/lib/commands/outline.ts @@ -1,16 +0,0 @@ -import { Command } from 'commander'; - -// TODO: Migrate to v2 client when outline contracts are available -// This command requires v1-specific features: searchObjectsDetailed, ObjectRegistry -// See: docs/plans/active/2025-12-20-adt-cli-api-compatibility.md - -export const outlineCommand = new Command('outline') - .argument('', 'ABAP object name to show outline for') - .description('Show object structure outline (temporarily disabled)') - .action(async (objectName: string) => { - // Stub implementation - command needs migration to v2 client - console.error(`❌ Outline command is temporarily disabled pending v2 client migration.`); - console.error(` Object: ${objectName}`); - console.error(`💡 Use SAP GUI SE80 or ADT Eclipse to view object outlines.`); - process.exit(1); - }); diff --git a/packages/adt-cli/src/lib/commands/package/get.ts b/packages/adt-cli/src/lib/commands/package/get.ts index d384214c..4937d2b0 100644 --- a/packages/adt-cli/src/lib/commands/package/get.ts +++ b/packages/adt-cli/src/lib/commands/package/get.ts @@ -29,7 +29,8 @@ export const packageGetCommand = new Command('package') // Use router to render the package page const route = router.get('DEVC'); // Extract package data - response is wrapped in { package: ... } - const pkgData = (pkg as { package?: Record }).package ?? pkg; + const pkgData = + (pkg as { package?: Record })?.package ?? pkg ?? {}; if (route) { const page = route.page(pkgData, { name }); render(page); @@ -45,7 +46,7 @@ export const packageGetCommand = new Command('package') } catch (error) { console.error( `❌ Failed to get package:`, - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); process.exit(1); } diff --git a/packages/adt-cli/src/lib/commands/repl/index.ts b/packages/adt-cli/src/lib/commands/repl/index.ts index 3cab3492..023c740a 100644 --- a/packages/adt-cli/src/lib/commands/repl/index.ts +++ b/packages/adt-cli/src/lib/commands/repl/index.ts @@ -16,9 +16,14 @@ async function createFetchFn() { return async ( url: string, - options?: { method?: string; headers?: Record } + options?: { method?: string; headers?: Record }, ): Promise => { - const method = (options?.method || 'GET') as 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'; + const method = (options?.method || 'GET') as + | 'GET' + | 'POST' + | 'PUT' + | 'PATCH' + | 'DELETE'; const response = await adtClient.fetch(url, { method, headers: options?.headers || { Accept: '*/*' }, @@ -33,7 +38,8 @@ async function createFetchFn() { async function getSystemId(): Promise { try { const adtClient = await getAdtClientV2(); - const info = await adtClient.adt.core.http.systeminformation.getSystemInfo(); + const info = + await adtClient.adt.core.http.systeminformation.getSystemInfo(); // Response is parsed data with systemID property const infoData = info as { systemID?: string }; return infoData.systemID; @@ -59,7 +65,7 @@ export function createReplCommand(): Command { } catch (error) { console.error( '❌ Failed to start REPL:', - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); process.exit(1); } diff --git a/packages/adt-cli/src/lib/commands/research-sessions-cmd.ts b/packages/adt-cli/src/lib/commands/research-sessions-cmd.ts deleted file mode 100644 index 9afb58d8..00000000 --- a/packages/adt-cli/src/lib/commands/research-sessions-cmd.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * CLI Command wrapper for sessions research - */ - -import { Command } from 'commander'; -import { researchSessions, SessionsResearchOptions } from './research-sessions'; - -export function createResearchSessionsCommand(): Command { - return new Command('research-sessions') - .description('Research ADT sessions endpoint and related URLs') - .option('-v, --verbose', 'Show detailed response data') - .option('-o, --output ', 'Save results to file') - .option( - '-f, --format ', - 'Output format: console|json|xml', - 'console' - ) - .action(async (options: SessionsResearchOptions) => { - try { - await researchSessions(options); - } catch (error: any) { - console.error('❌ Research failed:', error.message); - process.exit(1); - } - }); -} diff --git a/packages/adt-cli/src/lib/commands/research-sessions.ts b/packages/adt-cli/src/lib/commands/research-sessions.ts index d792b092..e69de29b 100644 --- a/packages/adt-cli/src/lib/commands/research-sessions.ts +++ b/packages/adt-cli/src/lib/commands/research-sessions.ts @@ -1,34 +0,0 @@ -/** - * Research command for ADT Sessions endpoint - * Usage: npx adt research-sessions [options] - * - * TODO: Migrate to v2 client when sessions contracts are available - * This command requires v1-specific features: AdtClientImpl, raw request handling - * See: docs/plans/active/2025-12-20-adt-cli-api-compatibility.md - */ - -import { Command } from 'commander'; - -export interface SessionsResearchOptions { - verbose?: boolean; - output?: string; - format?: 'console' | 'json' | 'xml'; -} - -export async function researchSessions(_options: SessionsResearchOptions): Promise { - // Stub implementation - command needs migration to v2 client - console.error(`❌ Research-sessions command is temporarily disabled pending v2 client migration.`); - console.error(`💡 This is a development/debugging command that will be restored after v2 migration.`); - process.exit(1); -} - -export function createResearchSessionsCommand(): Command { - return new Command('research-sessions') - .description('Research ADT sessions endpoint (temporarily disabled)') - .option('-v, --verbose', 'Enable verbose output') - .option('-o, --output ', 'Output file path') - .option('-f, --format ', 'Output format: console, json, xml', 'console') - .action(async (options: SessionsResearchOptions) => { - await researchSessions(options); - }); -} diff --git a/packages/adt-cli/src/lib/commands/search.ts b/packages/adt-cli/src/lib/commands/search.ts index 636ecbe4..4a57a4d6 100644 --- a/packages/adt-cli/src/lib/commands/search.ts +++ b/packages/adt-cli/src/lib/commands/search.ts @@ -11,28 +11,43 @@ export const searchCommand = new Command('search') const adtClient = await getAdtClientV2(); const maxResults = parseInt(options.max, 10); - console.log(`🔍 Searching for: "${query}" (max: ${maxResults} results)...\n`); + console.log( + `🔍 Searching for: "${query}" (max: ${maxResults} results)...\n`, + ); // Perform search - const results = await adtClient.adt.repository.informationsystem.search.quickSearch({ - query, - maxResults, - }); + const results = + await adtClient.adt.repository.informationsystem.search.quickSearch({ + query, + maxResults, + }); // Handle results - define type for search objects - type SearchObject = { name?: string; type?: string; uri?: string; description?: string; packageName?: string }; + type SearchObject = { + name?: string; + type?: string; + uri?: string; + description?: string; + packageName?: string; + }; // Results can come in different shapes depending on response - handle both const resultsAny = results as Record; let rawObjects: SearchObject | SearchObject[] | undefined; if ('objectReferences' in resultsAny && resultsAny.objectReferences) { - const refs = resultsAny.objectReferences as { objectReference?: SearchObject | SearchObject[] }; + const refs = resultsAny.objectReferences as { + objectReference?: SearchObject | SearchObject[]; + }; rawObjects = refs.objectReference; } else if ('mainObject' in resultsAny && resultsAny.mainObject) { - const main = resultsAny.mainObject as { objectReference?: SearchObject | SearchObject[] }; + const main = resultsAny.mainObject as { + objectReference?: SearchObject | SearchObject[]; + }; rawObjects = main.objectReference; } const objects: SearchObject[] = rawObjects - ? (Array.isArray(rawObjects) ? rawObjects : [rawObjects]) + ? Array.isArray(rawObjects) + ? rawObjects + : [rawObjects] : []; if (objects.length === 0) { @@ -64,7 +79,7 @@ export const searchCommand = new Command('search') } catch (error) { console.error( '❌ Search failed:', - error instanceof Error ? error.message : String(error) + error instanceof Error ? error.message : String(error), ); if (error instanceof Error && error.stack) { console.error('\nStack trace:', error.stack); diff --git a/packages/adt-cli/src/lib/commands/test-adt.ts b/packages/adt-cli/src/lib/commands/test-adt.ts index 2a7c4895..e69de29b 100644 --- a/packages/adt-cli/src/lib/commands/test-adt.ts +++ b/packages/adt-cli/src/lib/commands/test-adt.ts @@ -1,28 +0,0 @@ -import { Command } from 'commander'; -import { getAdtClientV2 } from '../utils/adt-client-v2'; - -/** - * @deprecated Legacy test command - needs migration to v2 client - * TODO: Remove or migrate this command - */ -export function createTestAdtCommand(): Command { - const command = new Command('test-adt'); - - command - .description('Test ADT client connectivity') - .action(async () => { - console.log('🧪 Testing ADT Client connectivity...'); - - try { - // Just test that we can get an authenticated client - await getAdtClientV2(); - console.log('✅ ADT Client initialized successfully'); - console.log('\n✅ ADT Client test completed!'); - } catch (error) { - console.error('❌ Test failed:', error instanceof Error ? error.message : String(error)); - process.exit(1); - } - }); - - return command; -} diff --git a/packages/adt-cli/src/lib/commands/test-log.ts b/packages/adt-cli/src/lib/commands/test-log.ts deleted file mode 100644 index f077b3bb..00000000 --- a/packages/adt-cli/src/lib/commands/test-log.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Command } from 'commander'; -import { createCliLogger } from '../utils/logger-config'; - -export function createTestLogCommand(): Command { - const command = new Command('test-log'); - - command - .description('Test logging functionality with different components') - .action(async (options, cmd) => { - // Get global options from the root program - let rootCmd = cmd.parent || cmd; - while (rootCmd.parent) { - rootCmd = rootCmd.parent; - } - const globalOptions = rootCmd.opts(); - const logger = createCliLogger({ verbose: globalOptions.verbose }); - - // Test basic logging - logger.info('Testing basic info log'); - logger.debug('Testing basic debug log'); - - // Test component-specific logging - const authLogger = logger.child({ component: 'auth' }); - authLogger.info('Authentication component log'); - authLogger.debug('Authentication debug log'); - - const connectionLogger = logger.child({ component: 'connection' }); - connectionLogger.info('Connection component log'); - connectionLogger.debug('Connection debug log'); - - const cliLogger = logger.child({ component: 'cli' }); - cliLogger.info('CLI component log'); - cliLogger.warn('CLI warning log'); - cliLogger.error('CLI error log'); - - // Test nested child loggers - const nestedLogger = authLogger.child({ subcomponent: 'oauth' }); - nestedLogger.info('Nested logger test'); - - console.log('✅ Test logging completed!'); - }); - - return command; -} diff --git a/packages/adt-cli/src/lib/commands/unlock/index.ts b/packages/adt-cli/src/lib/commands/unlock/index.ts deleted file mode 100644 index d73fefcf..00000000 --- a/packages/adt-cli/src/lib/commands/unlock/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Command } from 'commander'; - -// TODO: Migrate to v2 client when lock/unlock contracts are available -// This command requires v1-specific features: searchObjectsDetailed, unlockObject -// See: docs/plans/active/2025-12-20-adt-cli-api-compatibility.md - -async function unlockObject(objectName: string): Promise { - // Stub implementation - command needs migration to v2 client - console.error(`❌ Unlock command is temporarily disabled pending v2 client migration.`); - console.error(` Object: ${objectName}`); - console.error(`💡 Use SAP GUI transaction SE80 or SM12 to manage locks.`); - process.exit(1); -} - -export function createUnlockCommand(): Command { - const command = new Command('unlock'); - - command - .description('Unlock a SAP object by name (temporarily disabled)') - .argument( - '', - 'Name of the object to unlock (e.g., ZIF_PETSTORE)' - ) - .option( - '--lock-handle ', - 'Specific lock handle to unlock (more reliable than generic unlock)' - ) - .action(async (objectName: string) => { - await unlockObject(objectName); - }); - - return command; -} diff --git a/packages/adt-cli/src/lib/components/TreeConfigEditor.tsx b/packages/adt-cli/src/lib/components/TreeConfigEditor.tsx index c4e9db72..d6ca73da 100644 --- a/packages/adt-cli/src/lib/components/TreeConfigEditor.tsx +++ b/packages/adt-cli/src/lib/components/TreeConfigEditor.tsx @@ -102,7 +102,10 @@ function TextField({ const displayValue = displayText.padEnd(width, ' ').slice(0, width); return ( - {focused ? '▶ ' : ' '}{label}: + + {focused ? '▶ ' : ' '} + {label}:{' '} + o.value === value); const displayLabel = selectedOption?.label || 'Select a date'; - + return ( - {focused ? '▶ ' : ' '}{label}: + + {focused ? '▶ ' : ' '} + {label}:{' '} + - {' '}{displayLabel.padEnd(20, ' ')}{' '} + {' '} + {displayLabel.padEnd(20, ' ')}{' '} {expanded ? ' ▲' : ' ▼'} {focused && !expanded && [Enter to open]} @@ -153,7 +160,13 @@ function SelectField({ {idx === highlightedIndex ? '▶ ' : ' '} @@ -163,7 +176,9 @@ function SelectField({ ))} - ↑↓ Select | Enter Confirm | Esc Cancel + + ↑↓ Select | Enter Confirm | Esc Cancel + )} @@ -186,7 +201,7 @@ export function TreeConfigEditor({ initialConfig, onSave, onCancel, -}: TreeConfigEditorProps) { +}: TreeConfigEditorProps): React.ReactNode { const { exit } = useApp(); const [config, setConfig] = useState(initialConfig); const [focusIndex, setFocusIndex] = useState(0); @@ -198,17 +213,14 @@ export function TreeConfigEditor({ const currentField = FIELD_ORDER[focusIndex]; - const moveFocus = useCallback( - (delta: number) => { - setFocusIndex((prev: number) => { - const next = prev + delta; - if (next < 0) return FIELD_ORDER.length - 1; - if (next >= FIELD_ORDER.length) return 0; - return next; - }); - }, - [] - ); + const moveFocus = useCallback((delta: number) => { + setFocusIndex((prev: number) => { + const next = prev + delta; + if (next < 0) return FIELD_ORDER.length - 1; + if (next >= FIELD_ORDER.length) return 0; + return next; + }); + }, []); const toggleCheckbox = useCallback((field: keyof TreeConfigState) => { setConfig((prev: TreeConfigState) => ({ @@ -221,7 +233,7 @@ export function TreeConfigEditor({ (field: 'releasedDateFilter', delta: number) => { setConfig((prev: TreeConfigState) => { const currentIndex = DATE_FILTER_OPTIONS.findIndex( - (o) => o.value === prev[field] + (o) => o.value === prev[field], ); let nextIndex = currentIndex + delta; if (nextIndex < 0) nextIndex = DATE_FILTER_OPTIONS.length - 1; @@ -232,7 +244,7 @@ export function TreeConfigEditor({ }; }); }, - [] + [], ); const startTextEdit = useCallback( @@ -240,7 +252,7 @@ export function TreeConfigEditor({ setEditingText(true); setTextBuffer(config[field]); }, - [config] + [config], ); const finishTextEdit = useCallback( @@ -252,7 +264,7 @@ export function TreeConfigEditor({ setEditingText(false); setTextBuffer(''); }, - [textBuffer] + [textBuffer], ); const cancelTextEdit = useCallback(() => { @@ -263,7 +275,7 @@ export function TreeConfigEditor({ // Open dropdown and set initial index to current value const openDropdown = useCallback(() => { const currentIndex = DATE_FILTER_OPTIONS.findIndex( - (o) => o.value === config.releasedDateFilter + (o) => o.value === config.releasedDateFilter, ); setDropdownIndex(currentIndex >= 0 ? currentIndex : 0); setDropdownOpen(true); @@ -283,76 +295,98 @@ export function TreeConfigEditor({ setDropdownOpen(false); }, []); - useInput((input: string, key: { return?: boolean; escape?: boolean; backspace?: boolean; delete?: boolean; ctrl?: boolean; meta?: boolean; upArrow?: boolean; downArrow?: boolean; leftArrow?: boolean; rightArrow?: boolean; tab?: boolean; shift?: boolean }) => { - // Handle dropdown mode - if (dropdownOpen) { - if (key.upArrow) { - setDropdownIndex((prev: number) => (prev > 0 ? prev - 1 : DATE_FILTER_OPTIONS.length - 1)); - } else if (key.downArrow) { - setDropdownIndex((prev: number) => (prev < DATE_FILTER_OPTIONS.length - 1 ? prev + 1 : 0)); - } else if (key.return || input === ' ') { - selectDropdownOption(dropdownIndex); - } else if (key.escape) { - closeDropdown(); + useInput( + ( + input: string, + key: { + return?: boolean; + escape?: boolean; + backspace?: boolean; + delete?: boolean; + ctrl?: boolean; + meta?: boolean; + upArrow?: boolean; + downArrow?: boolean; + leftArrow?: boolean; + rightArrow?: boolean; + tab?: boolean; + shift?: boolean; + }, + ) => { + // Handle dropdown mode + if (dropdownOpen) { + if (key.upArrow) { + setDropdownIndex((prev: number) => + prev > 0 ? prev - 1 : DATE_FILTER_OPTIONS.length - 1, + ); + } else if (key.downArrow) { + setDropdownIndex((prev: number) => + prev < DATE_FILTER_OPTIONS.length - 1 ? prev + 1 : 0, + ); + } else if (key.return || input === ' ') { + selectDropdownOption(dropdownIndex); + } else if (key.escape) { + closeDropdown(); + } + return; } - return; - } - // Handle text editing mode - if (editingText) { - if (key.return) { - finishTextEdit(currentField as 'userName' | 'fromDate' | 'toDate'); - } else if (key.escape) { - cancelTextEdit(); - } else if (key.backspace || key.delete) { - setTextBuffer((prev: string) => prev.slice(0, -1)); - } else if (input && !key.ctrl && !key.meta) { - setTextBuffer((prev: string) => prev + input); - } - return; - } - - // Navigation - if (key.upArrow || (key.shift && key.tab)) { - moveFocus(-1); - } else if (key.downArrow || key.tab) { - moveFocus(1); - } else if (key.leftArrow) { - if (currentField === 'releasedDateFilter') { - cycleSelect('releasedDateFilter', -1); + // Handle text editing mode + if (editingText) { + if (key.return) { + finishTextEdit(currentField as 'userName' | 'fromDate' | 'toDate'); + } else if (key.escape) { + cancelTextEdit(); + } else if (key.backspace || key.delete) { + setTextBuffer((prev: string) => prev.slice(0, -1)); + } else if (input && !key.ctrl && !key.meta) { + setTextBuffer((prev: string) => prev + input); + } + return; } - } else if (key.rightArrow) { - if (currentField === 'releasedDateFilter') { - cycleSelect('releasedDateFilter', 1); - } - } else if (key.return || input === ' ') { - // Handle field activation - switch (currentField) { - case 'releasedDateFilter': - openDropdown(); - break; - case 'userName': - case 'fromDate': - case 'toDate': - startTextEdit(currentField); - break; - case 'customizingRequests': - case 'workbenchRequests': - case 'transportOfCopies': - case 'modifiable': - case 'released': - toggleCheckbox(currentField); - break; + + // Navigation + if (key.upArrow || (key.shift && key.tab)) { + moveFocus(-1); + } else if (key.downArrow || key.tab) { + moveFocus(1); + } else if (key.leftArrow) { + if (currentField === 'releasedDateFilter') { + cycleSelect('releasedDateFilter', -1); + } + } else if (key.rightArrow) { + if (currentField === 'releasedDateFilter') { + cycleSelect('releasedDateFilter', 1); + } + } else if (key.return || input === ' ') { + // Handle field activation + switch (currentField) { + case 'releasedDateFilter': + openDropdown(); + break; + case 'userName': + case 'fromDate': + case 'toDate': + startTextEdit(currentField); + break; + case 'customizingRequests': + case 'workbenchRequests': + case 'transportOfCopies': + case 'modifiable': + case 'released': + toggleCheckbox(currentField); + break; + } + } else if (key.escape) { + onCancel(); + exit(); + } else if (key.ctrl && input === 's') { + // Ctrl+S to save + onSave(config); + exit(); } - } else if (key.escape) { - onCancel(); - exit(); - } else if (key.ctrl && input === 's') { - // Ctrl+S to save - onSave(config); - exit(); - } - }); + }, + ); // Check if date fields should be shown (only when Released is checked and Custom date filter) const showDateFields = config.released && config.releasedDateFilter === '4'; @@ -450,7 +484,8 @@ export function TreeConfigEditor({ {/* Help text */} - ↑↓ Navigate | Space/Enter Toggle/Edit | ←→ Change selection | Ctrl+S Save | Esc Cancel + ↑↓ Navigate | Space/Enter Toggle/Edit | ←→ Change selection | Ctrl+S + Save | Esc Cancel diff --git a/packages/adt-cli/src/lib/config/auth.ts b/packages/adt-cli/src/lib/config/auth.ts index 73897bdd..63ac9384 100644 --- a/packages/adt-cli/src/lib/config/auth.ts +++ b/packages/adt-cli/src/lib/config/auth.ts @@ -49,7 +49,7 @@ export class BtpAuthProvider implements AuthProvider { throw new Error( `Failed to create BTP client: ${ error instanceof Error ? error.message : 'Unknown error' - }` + }`, ); } } @@ -121,10 +121,10 @@ export class MockAuthProvider implements AuthProvider { async createClient(): Promise { // Return a mock client for testing // Use config.enabled to potentially customize mock behavior - const baseUrl = this.config.enabled - ? 'http://mock-sap-system.local' + const baseUrl = this.config.enabled + ? 'http://mock-sap-system.local' : 'http://disabled-mock.local'; - + return createAdtClient({ baseUrl, username: 'mock-user', @@ -158,7 +158,7 @@ export class AuthRegistry { */ register( type: string, - providerClass: new (config: any) => AuthProvider + providerClass: new (config: any) => AuthProvider, ): void { this.providers.set(type, providerClass); } diff --git a/packages/adt-cli/src/lib/config/validation.ts b/packages/adt-cli/src/lib/config/validation.ts index 4c93a559..48ce9ad7 100644 --- a/packages/adt-cli/src/lib/config/validation.ts +++ b/packages/adt-cli/src/lib/config/validation.ts @@ -77,15 +77,22 @@ export class ConfigValidator { if (!plugin.name.startsWith('@abapify/')) { warnings.push( - `Plugin ${plugin.name} does not follow @abapify/* naming convention` + `Plugin ${plugin.name} does not follow @abapify/* naming convention`, ); } // Validate version if specified (version is optional on PluginSpec) - const pluginWithVersion = plugin as { name: string; version?: string; config?: unknown }; - if (pluginWithVersion.version && !this.isValidSemver(pluginWithVersion.version)) { + const pluginWithVersion = plugin as { + name: string; + version?: string; + config?: unknown; + }; + if ( + pluginWithVersion.version && + !this.isValidSemver(pluginWithVersion.version) + ) { warnings.push( - `Plugin ${plugin.name} has invalid version format: ${pluginWithVersion.version}` + `Plugin ${pluginWithVersion.name} has invalid version format: ${pluginWithVersion.version}`, ); } @@ -93,13 +100,13 @@ export class ConfigValidator { if (plugin.config) { const configResult = this.validatePluginConfig( plugin.name, - plugin.config + plugin.config, ); errors.push( - ...configResult.errors.map((err) => `${plugin.name}: ${err}`) + ...configResult.errors.map((err) => `${plugin.name}: ${err}`), ); warnings.push( - ...configResult.warnings.map((warn) => `${plugin.name}: ${warn}`) + ...configResult.warnings.map((warn) => `${plugin.name}: ${warn}`), ); } } @@ -125,7 +132,7 @@ export class ConfigValidator { []; if (!availableFormats.includes(config.defaults.format)) { errors.push( - `Default format '${config.defaults.format}' is not in configured plugins` + `Default format '${config.defaults.format}' is not in configured plugins`, ); } } @@ -136,7 +143,7 @@ export class ConfigValidator { !this.isValidPath(config.defaults.outputPath) ) { warnings.push( - `Default output path may be invalid: ${config.defaults.outputPath}` + `Default output path may be invalid: ${config.defaults.outputPath}`, ); } @@ -166,7 +173,7 @@ export class ConfigValidator { */ private validatePluginConfig( pluginName: string, - config: any + config: any, ): ConfigValidationResult { const errors: string[] = []; const warnings: string[] = []; diff --git a/packages/adt-cli/src/lib/plugin-loader.ts b/packages/adt-cli/src/lib/plugin-loader.ts index d8bdda5a..9c0c03c6 100644 --- a/packages/adt-cli/src/lib/plugin-loader.ts +++ b/packages/adt-cli/src/lib/plugin-loader.ts @@ -1,6 +1,6 @@ /** * CLI Plugin Loader - * + * * Dynamically loads CLI command plugins from config. * Translates CLI-agnostic plugin definitions to Commander commands. */ @@ -8,9 +8,9 @@ import { Command } from 'commander'; import { resolve, dirname } from 'path'; import { existsSync } from 'fs'; -import type { - CliCommandPlugin, - CliContext, +import type { + CliCommandPlugin, + CliContext, CliLogger, AdtCliConfig, } from '@abapify/adt-plugin'; @@ -18,11 +18,32 @@ import { getAdtClientV2 } from './utils/adt-client-v2'; import { getAdtSystem } from './ui/components/link'; /** - * Load config file from current directory or parent directories + * Load config file from explicit path or current directory */ -export async function loadCliConfig(cwd: string): Promise { +export async function loadCliConfig( + cwd: string, + explicitConfigPath?: string, +): Promise { + // If explicit config path provided, use it directly + if (explicitConfigPath) { + const configPath = resolve(cwd, explicitConfigPath); + if (existsSync(configPath)) { + try { + const module = await import(configPath); + return module.default ?? module; + } catch (err) { + console.error(`Failed to load config from ${configPath}:`, err); + return null; + } + } else { + console.error(`Config file not found: ${configPath}`); + return null; + } + } + + // Otherwise search for config in current directory and parents const configNames = ['adt.config.ts', 'adt.config.js', 'adt.config.mjs']; - + let dir = cwd; while (dir !== dirname(dir)) { for (const name of configNames) { @@ -39,7 +60,7 @@ export async function loadCliConfig(cwd: string): Promise { } dir = dirname(dir); } - + return null; } @@ -58,18 +79,23 @@ function createSimpleLogger(): CliLogger { /** * Convert a CLI-agnostic plugin to a Commander command */ -function pluginToCommand(plugin: CliCommandPlugin, config: AdtCliConfig): Command { - const cmd = new Command(plugin.name) - .description(plugin.description); - +function pluginToCommand( + plugin: CliCommandPlugin, + config: AdtCliConfig, +): Command { + const cmd = new Command(plugin.name).description(plugin.description); + // Add options if (plugin.options) { for (const opt of plugin.options) { // Commander expects string | boolean | string[] for defaults - const defaultValue = opt.default !== undefined - ? (typeof opt.default === 'number' ? String(opt.default) : opt.default as string | boolean) - : undefined; - + const defaultValue = + opt.default !== undefined + ? typeof opt.default === 'number' + ? String(opt.default) + : (opt.default as string | boolean) + : undefined; + if (opt.required) { cmd.requiredOption(opt.flags, opt.description, defaultValue); } else { @@ -77,28 +103,28 @@ function pluginToCommand(plugin: CliCommandPlugin, config: AdtCliConfig): Comman } } } - + // Add arguments if (plugin.arguments) { for (const arg of plugin.arguments) { cmd.argument(arg.name, arg.description, arg.default); } } - + // Add subcommands recursively if (plugin.subcommands) { for (const sub of plugin.subcommands) { cmd.addCommand(pluginToCommand(sub, config)); } } - + // Add action if execute is defined if (plugin.execute) { cmd.action(async (...actionArgs: unknown[]) => { // Commander passes options as last argument before Command const cmdInstance = actionArgs.pop() as Command; const options = cmdInstance.opts(); - + // Merge positional args into options const args: Record = { ...options }; if (plugin.arguments) { @@ -107,7 +133,7 @@ function pluginToCommand(plugin: CliCommandPlugin, config: AdtCliConfig): Comman args[argName] = actionArgs[index]; }); } - + const ctx: CliContext = { cwd: process.cwd(), config, @@ -118,7 +144,7 @@ function pluginToCommand(plugin: CliCommandPlugin, config: AdtCliConfig): Comman // Provide system name for ADT hyperlinks adtSystemName: getAdtSystem(), }; - + try { await plugin.execute!(args, ctx); } catch (err) { @@ -127,28 +153,33 @@ function pluginToCommand(plugin: CliCommandPlugin, config: AdtCliConfig): Comman } }); } - + return cmd; } /** * Load a command plugin from a module path */ -async function loadCommandPlugin(modulePath: string, cwd: string): Promise { +async function loadCommandPlugin( + modulePath: string, + cwd: string, +): Promise { try { // Handle relative paths - const resolvedPath = modulePath.startsWith('.') + const resolvedPath = modulePath.startsWith('.') ? resolve(cwd, modulePath) : modulePath; - + const module = await import(resolvedPath); const plugin = module.default ?? module; - + if (!plugin?.name || !plugin?.description) { - console.warn(`Invalid command plugin: ${modulePath} (missing name or description)`); + console.warn( + `Invalid command plugin: ${modulePath} (missing name or description)`, + ); return null; } - + return plugin as CliCommandPlugin; } catch (err) { console.warn(`Failed to load command plugin: ${modulePath}`, err); @@ -159,13 +190,17 @@ async function loadCommandPlugin(modulePath: string, cwd: string): Promise { - const config = await loadCliConfig(cwd); - +export async function loadCommandPlugins( + program: Command, + cwd: string, + explicitConfigPath?: string, +): Promise { + const config = await loadCliConfig(cwd, explicitConfigPath); + if (!config?.commands?.length) { return; } - + for (const modulePath of config.commands) { const plugin = await loadCommandPlugin(modulePath, cwd); if (plugin) { diff --git a/packages/adt-cli/src/lib/plugins/errors.ts b/packages/adt-cli/src/lib/plugins/errors.ts index 57e45533..75957be6 100644 --- a/packages/adt-cli/src/lib/plugins/errors.ts +++ b/packages/adt-cli/src/lib/plugins/errors.ts @@ -11,7 +11,7 @@ export class PluginError extends Error { | 'validation' | 'filesystem', public readonly context?: Record, - public override readonly cause?: Error + public override readonly cause?: Error, ) { super(message); this.name = 'PluginError'; @@ -25,7 +25,7 @@ export class PluginConfigError extends PluginError { constructor( plugin: string, message: string, - context?: Record + context?: Record, ) { super(message, plugin, 'config', context); this.name = 'PluginConfigError'; @@ -40,7 +40,7 @@ export class PluginSerializationError extends PluginError { plugin: string, message: string, context?: Record, - cause?: Error + cause?: Error, ) { super(message, plugin, 'serialization', context, cause); this.name = 'PluginSerializationError'; @@ -54,7 +54,7 @@ export class PluginValidationError extends PluginError { constructor( plugin: string, message: string, - context?: Record + context?: Record, ) { super(message, plugin, 'validation', context); this.name = 'PluginValidationError'; @@ -69,7 +69,7 @@ export class PluginFilesystemError extends PluginError { plugin: string, message: string, context?: Record, - cause?: Error + cause?: Error, ) { super(message, plugin, 'filesystem', context, cause); this.name = 'PluginFilesystemError'; diff --git a/packages/adt-cli/src/lib/plugins/mock-e2e.test.ts b/packages/adt-cli/src/lib/plugins/mock-e2e.test.ts index 5681b943..d915b55a 100644 --- a/packages/adt-cli/src/lib/plugins/mock-e2e.test.ts +++ b/packages/adt-cli/src/lib/plugins/mock-e2e.test.ts @@ -15,7 +15,7 @@ import { tmpdir } from 'os'; /** * Mock OAT plugin for testing - * + * * Note: This implements the FormatPlugin interface with serializeObject * which is the required method. The serialize method is optional/legacy. */ @@ -27,7 +27,7 @@ class MockOatPlugin implements FormatPlugin { async serializeObject( object: AdkObject, targetPath: string, - context: SerializationContext + context: SerializationContext, ): Promise { const filesCreated: string[] = []; @@ -61,7 +61,7 @@ type: ${object.type}`; /** * Mock abapGit plugin for testing - * + * * Note: This implements the FormatPlugin interface with serializeObject * which is the required method. */ @@ -73,7 +73,7 @@ class MockAbapGitPlugin implements FormatPlugin { async serializeObject( object: AdkObject, targetPath: string, - context: SerializationContext + context: SerializationContext, ): Promise { const filesCreated: string[] = []; @@ -83,12 +83,12 @@ class MockAbapGitPlugin implements FormatPlugin { const abapFile = path.join( targetPath, 'src', - `${object.name.toLowerCase()}.${object.kind.toLowerCase()}.abap` + `${object.name.toLowerCase()}.${object.kind.toLowerCase()}.abap`, ); await fs.writeFile( abapFile, `* Generated by abapGit plugin\n* Object: ${object.name}`, - 'utf-8' + 'utf-8', ); filesCreated.push(abapFile); @@ -96,7 +96,7 @@ class MockAbapGitPlugin implements FormatPlugin { const xmlFile = path.join( targetPath, 'src', - `${object.name.toLowerCase()}.${object.kind.toLowerCase()}.xml` + `${object.name.toLowerCase()}.${object.kind.toLowerCase()}.xml`, ); const xmlContent = ` @@ -307,7 +307,7 @@ describe('Plugin Architecture E2E Tests', () => { expect(validation.errors).toContain('Username is required for basic auth'); expect(validation.errors).toContain('Password is required for basic auth'); expect(validation.errors).toContain( - 'At least one format plugin must be configured' + 'At least one format plugin must be configured', ); }); diff --git a/packages/adt-cli/src/lib/plugins/plugin-manager.ts b/packages/adt-cli/src/lib/plugins/plugin-manager.ts index d2ff7715..0edf6b30 100644 --- a/packages/adt-cli/src/lib/plugins/plugin-manager.ts +++ b/packages/adt-cli/src/lib/plugins/plugin-manager.ts @@ -1,9 +1,10 @@ -// TODO: BaseFormat and FormatRegistry were removed - needs ADK migration +// NOTE: BaseFormat and FormatRegistry were removed during v2 migration +// The format plugin system needs to be redesigned with ADK integration // import { BaseFormat } from '../formats/base-format'; import { ConfigLoader } from '../config/loader'; import { CliConfig } from '../config/interfaces'; -// TODO: Stub until ADK migration +// NOTE: Stub interface until format plugin system is redesigned with ADK interface BaseFormat { name: string; description: string; @@ -60,7 +61,7 @@ export class PluginManager { */ async loadPlugin( pluginName: string, - options?: Record + options?: Record, ): Promise { const shortName = this.getShortName(pluginName); @@ -93,7 +94,7 @@ export class PluginManager { throw new Error( `Failed to load plugin '${pluginName}': ${ error instanceof Error ? error.message : String(error) - }` + }`, ); } } @@ -120,8 +121,8 @@ export class PluginManager { if (!plugin) { throw new Error( `Format '${shortName}' not loaded. Available: ${this.getAvailableFormats().join( - ', ' - )}` + ', ', + )}`, ); } return plugin.instance; @@ -192,7 +193,7 @@ export class PluginManager { */ private async loadExternalPlugin( packageName: string, - options?: Record + options?: Record, ): Promise { try { // Dynamic import of external package @@ -208,7 +209,7 @@ export class PluginManager { if (!FormatClass) { throw new Error( - `No format class found in package '${packageName}'. Expected exports: default, Format, or *Format` + `No format class found in package '${packageName}'. Expected exports: default, Format, or *Format`, ); } @@ -219,7 +220,7 @@ export class PluginManager { error.message.includes('Cannot resolve module') ) { throw new Error( - `Package '${packageName}' not found. Install it with: npm install ${packageName}` + `Package '${packageName}' not found. Install it with: npm install ${packageName}`, ); } throw error; @@ -228,13 +229,15 @@ export class PluginManager { /** * Load built-in plugin - * TODO: FormatRegistry was removed - needs ADK migration + * NOTE: FormatRegistry was removed - needs ADK migration */ private async loadBuiltinPlugin( pluginName: string, - _options?: Record + _options?: Record, ): Promise { - throw new Error(`Built-in plugin '${pluginName}' not available - FormatRegistry needs ADK migration`); + throw new Error( + `Built-in plugin '${pluginName}' not available - FormatRegistry needs ADK migration`, + ); } /** diff --git a/packages/adt-cli/src/lib/plugins/registry.ts b/packages/adt-cli/src/lib/plugins/registry.ts index 63a3ca07..ef43946e 100644 --- a/packages/adt-cli/src/lib/plugins/registry.ts +++ b/packages/adt-cli/src/lib/plugins/registry.ts @@ -32,7 +32,7 @@ export class PluginRegistry implements IPluginRegistry { } catch (error) { throw new PluginLoadError( spec.name, - error instanceof Error ? error : undefined + error instanceof Error ? error : undefined, ); } } @@ -86,7 +86,7 @@ export class PluginRegistry implements IPluginRegistry { if (!this.isValidPlugin(plugin)) { throw new PluginConfigError( pluginName, - 'Plugin does not implement required interface' + 'Plugin does not implement required interface', ); } @@ -113,7 +113,7 @@ export class PluginRegistry implements IPluginRegistry { if (!this.isValidPlugin(plugin)) { throw new PluginConfigError( spec.name, - 'Plugin does not implement FormatPlugin interface' + 'Plugin does not implement FormatPlugin interface', ); } diff --git a/packages/adt-cli/src/lib/services/import/service.ts b/packages/adt-cli/src/lib/services/import/service.ts index dd3a46b8..d3495cf8 100644 --- a/packages/adt-cli/src/lib/services/import/service.ts +++ b/packages/adt-cli/src/lib/services/import/service.ts @@ -62,7 +62,7 @@ export interface ImportResult { /** * Import Service - uses ADK architecture - * + * * Flow: * 1. Load format plugin (via CLI option or config) * 2. Fetch transport via AdkTransport.get() or package via AdkPackage.get() @@ -72,11 +72,13 @@ export interface ImportResult { export class ImportService { /** * Import objects from a transport request - * + * * @param options - Import options including transport number, output path, and format * @returns Import result with statistics */ - async importTransport(options: TransportImportOptions): Promise { + async importTransport( + options: TransportImportOptions, + ): Promise { if (options.debug) { console.log(`🔍 Importing transport: ${options.transportNumber}`); console.log(`📁 Output path: ${options.outputPath}`); @@ -85,54 +87,56 @@ export class ImportService { // Load format plugin const plugin = await loadFormatPlugin(options.format); - + if (options.debug) { console.log(`✅ Loaded plugin: ${plugin.name}`); } - + // Import AdkTransport dynamically (ADK must be initialized before this) const { AdkTransport } = await import('@abapify/adk'); - + // Fetch transport if (options.debug) { console.log(`🚛 Fetching transport: ${options.transportNumber}`); } const transport = await AdkTransport.get(options.transportNumber); - + // Filter by object types if specified let objectsToImport = transport.objects; if (options.objectTypes && options.objectTypes.length > 0) { - const types = options.objectTypes.map(t => t.toUpperCase()); + const types = options.objectTypes.map((t) => t.toUpperCase()); objectsToImport = transport.getObjectsByType(...types); if (options.debug) { - console.log(`🔍 Filtered to ${objectsToImport.length} objects by type: ${types.join(', ')}`); + console.log( + `🔍 Filtered to ${objectsToImport.length} objects by type: ${types.join(', ')}`, + ); } } - + // Track results const results = { success: 0, skipped: 0, failed: 0 }; const objectsByType: Record = {}; - + /** * Resolve full package path from root to the given package. * Uses ADK to load package → super package → etc until root. - * + * * Note: ADK handles per-instance caching. A global package cache * could be added to ADK later if performance becomes an issue. */ async function resolvePackagePath(packageName: string): Promise { const path: string[] = []; let currentPackage = packageName; - + // Traverse up the package hierarchy while (currentPackage) { path.unshift(currentPackage); // Add to beginning (building from leaf to root) - + try { // Load package to get super package const pkg = await AdkPackage.get(currentPackage); const superPkg = pkg.superPackage; - + if (superPkg?.name) { currentPackage = superPkg.name; } else { @@ -144,14 +148,14 @@ export class ImportService { break; } } - + return path; } - + if (options.debug) { console.log(`📦 Processing ${objectsToImport.length} objects...`); } - + // Process each object for (const objRef of objectsToImport) { try { @@ -159,14 +163,16 @@ export class ImportService { if (!plugin.instance.registry.isSupported(objRef.type)) { results.skipped++; if (options.debug) { - console.log(` ⏭️ ${objRef.type} ${objRef.name}: type not supported`); + console.log( + ` ⏭️ ${objRef.type} ${objRef.name}: type not supported`, + ); } continue; } // Load the ADK object const adkObject = await objRef.load(); - + if (!adkObject) { results.skipped++; if (options.debug) { @@ -174,47 +180,51 @@ export class ImportService { } continue; } - + // Build import context - plugin handles path logic based on its format rules // CLI provides a resolver function to get full package hierarchy from SAP const context: ImportContext = { resolvePackagePath, }; - + // Delegate to plugin - import object from SAP to local files const result = await plugin.instance.format.import( adkObject as any, // ADK object type options.outputPath, - context + context, ); - + if (result.success) { // Track statistics objectsByType[objRef.type] = (objectsByType[objRef.type] || 0) + 1; results.success++; - + if (options.debug) { console.log(` ✅ ${objRef.type} ${objRef.name}`); } } else { results.failed++; if (options.debug) { - console.log(` ❌ ${objRef.type} ${objRef.name}: ${result.errors?.join(', ') || 'unknown error'}`); + console.log( + ` ❌ ${objRef.type} ${objRef.name}: ${result.errors?.join(', ') || 'unknown error'}`, + ); } } } catch (error) { results.failed++; if (options.debug) { - console.log(` ❌ ${objRef.type} ${objRef.name}: ${error instanceof Error ? error.message : String(error)}`); + console.log( + ` ❌ ${objRef.type} ${objRef.name}: ${error instanceof Error ? error.message : String(error)}`, + ); } } } - + // Call afterImport hook if available if (plugin.instance.hooks?.afterImport) { await plugin.instance.hooks.afterImport(options.outputPath); } - + return { transportNumber: options.transportNumber, description: transport.description, @@ -227,7 +237,7 @@ export class ImportService { /** * Import objects from an ABAP package - * + * * @param options - Import options including package name, output path, and format * @returns Import result with statistics */ @@ -236,71 +246,79 @@ export class ImportService { console.log(`🔍 Importing package: ${options.packageName}`); console.log(`📁 Output path: ${options.outputPath}`); console.log(`🎯 Format: ${options.format}`); - console.log(`📦 Include subpackages: ${options.includeSubpackages ?? false}`); + console.log( + `📦 Include subpackages: ${options.includeSubpackages ?? false}`, + ); } // Load format plugin const plugin = await loadFormatPlugin(options.format); - + if (options.debug) { console.log(`✅ Loaded plugin: ${plugin.name}`); } - + // Import AdkPackage dynamically (ADK must be initialized before this) const { AdkPackage } = await import('@abapify/adk'); - + // Fetch package if (options.debug) { console.log(`📦 Fetching package: ${options.packageName}`); } const pkg = await AdkPackage.get(options.packageName); - + // Get objects from package - // TODO: ADK should support getObjects({ recursive: true }) instead of separate methods - const allObjects = options.includeSubpackages - ? await pkg.getAllObjects() // includes subpackages - : await pkg.getObjects(); // direct objects only - + // NOTE: Consider ADK enhancement - getObjects({ recursive: true }) instead of separate methods + const allObjects = options.includeSubpackages + ? await pkg.getAllObjects() // includes subpackages + : await pkg.getObjects(); // direct objects only + // Filter by object types if specified let objectsToImport = allObjects; if (options.objectTypes && options.objectTypes.length > 0) { - const types = options.objectTypes.map(t => t.toUpperCase()); - objectsToImport = allObjects.filter((obj: { type: string }) => types.includes(obj.type)); + const types = options.objectTypes.map((t) => t.toUpperCase()); + objectsToImport = allObjects.filter((obj: { type: string }) => + types.includes(obj.type), + ); if (options.debug) { - console.log(`🔍 Filtered to ${objectsToImport.length} objects by type: ${types.join(', ')}`); + console.log( + `🔍 Filtered to ${objectsToImport.length} objects by type: ${types.join(', ')}`, + ); } } - + // Track results const results = { success: 0, skipped: 0, failed: 0 }; const objectsByType: Record = {}; - + if (options.debug) { console.log(`📦 Processing ${objectsToImport.length} objects...`); } - + // Process each object - AbapObject has type and name for (const obj of objectsToImport) { try { // Delegate to plugin - import object from SAP to local files // Note: AbapObject from getObjects() may need to be loaded first await plugin.instance.importObject(obj, options.outputPath); - + // Track statistics objectsByType[obj.type] = (objectsByType[obj.type] || 0) + 1; results.success++; - + if (options.debug) { console.log(` ✅ ${obj.type} ${obj.name}`); } } catch (error) { results.failed++; if (options.debug) { - console.log(` ❌ ${obj.type} ${obj.name}: ${error instanceof Error ? error.message : String(error)}`); + console.log( + ` ❌ ${obj.type} ${obj.name}: ${error instanceof Error ? error.message : String(error)}`, + ); } } } - + return { packageName: options.packageName, description: pkg.description || `Package ${options.packageName}`, diff --git a/packages/adt-cli/src/lib/ui/pages/class.ts b/packages/adt-cli/src/lib/ui/pages/class.ts index 3c18c079..1a65821c 100644 --- a/packages/adt-cli/src/lib/ui/pages/class.ts +++ b/packages/adt-cli/src/lib/ui/pages/class.ts @@ -29,7 +29,6 @@ function formatDate(date: Date | string | undefined): string { }); } - // ============================================================================= // Render Functions // ============================================================================= @@ -39,72 +38,97 @@ function formatDate(date: Date | string | undefined): string { */ function renderClassPage(cls: any, _params: NavParams): Page { const sections: Component[] = []; - + // Extract values with defaults for optional fields const name = cls?.name ?? ''; const type = cls?.type ?? 'CLAS/OC'; const description = cls?.description ?? '-'; - + // Header section with core info const headerFields: Component[] = [ Field('Name', adtLink({ name, type })), Field('Type', type), Field('Description', description), ]; - + // Package link const pkgRef = cls?.packageRef; if (pkgRef?.name) { headerFields.push(Field('Package', adtLink({ ...pkgRef, type: 'DEVC/K' }))); } - + sections.push(Section('▼ Class', ...headerFields)); - + // Class-specific attributes section - only show non-default values const classFields: Component[] = [ Field('Category', cls?.category ?? '-'), Field('Visibility', cls?.visibility ?? '-'), ]; - if (cls?.state && cls.state !== 'active') classFields.push(Field('State', cls.state)); + if (cls?.state && cls.state !== 'active') + classFields.push(Field('State', cls.state)); if (cls?.abstract) classFields.push(Field('Abstract', '✓ Yes')); if (cls?.final) classFields.push(Field('Final', '✓ Yes')); if (cls?.hasTests) classFields.push(Field('Has Tests', '✓ Yes')); - if (cls?.sharedMemoryEnabled) classFields.push(Field('Shared Memory', '✓ Yes')); + if (cls?.sharedMemoryEnabled) + classFields.push(Field('Shared Memory', '✓ Yes')); if (cls?.modeled) classFields.push(Field('Modeled', '✓ Yes')); sections.push(Section('▼ Class Attributes', ...classFields)); - + // Super class link (most useful navigation!) const superRef = cls?.superClassRef; if (superRef?.name) { const navFields: Component[] = [ - Field('Super Class', adtLink({ ...superRef, type: superRef.type || 'CLAS/OC' })), + Field( + 'Super Class', + adtLink({ ...superRef, type: superRef.type || 'CLAS/OC' }), + ), ]; - + // Message class const msgRef = cls?.messageClassRef; if (msgRef?.name) { - navFields.push(Field('Message Class', adtLink({ ...msgRef, type: msgRef.type || 'MSAG' }))); + navFields.push( + Field( + 'Message Class', + adtLink({ ...msgRef, type: msgRef.type || 'MSAG' }), + ), + ); } - + // Root entity (for RAP) const rootRef = cls?.rootEntityRef; if (rootRef?.name) { - navFields.push(Field('Root Entity', adtLink({ ...rootRef, type: rootRef.type || 'DDLS/DF' }))); + navFields.push( + Field( + 'Root Entity', + adtLink({ ...rootRef, type: rootRef.type || 'DDLS/DF' }), + ), + ); } - + sections.push(Section('▼ Related Objects', ...navFields)); } - + // Implemented interfaces (very useful navigation!) const interfaces = cls?.interfaceRef ?? []; if (interfaces.length > 0) { - type InterfaceRef = { name?: string; uri?: string; type?: string; description?: string }; - const intfFields = interfaces.map((ref: InterfaceRef) => - Field(adtLink({ ...ref, type: ref.type || 'INTF/OI' }), ref.description ?? '') + type InterfaceRef = { + name?: string; + uri?: string; + type?: string; + description?: string; + }; + const intfFields = interfaces.map((ref: InterfaceRef) => + Field( + adtLink({ ...ref, type: ref.type || 'INTF/OI' }), + ref.description ?? '', + ), + ); + sections.push( + Section(`▼ Implemented Interfaces (${interfaces.length})`, ...intfFields), ); - sections.push(Section(`▼ Implemented Interfaces (${interfaces.length})`, ...intfFields)); } - + // Class includes (definitions, implementations, etc.) - clickable links const includes = cls?.include ?? []; if (includes.length > 0) { @@ -113,11 +137,14 @@ function renderClassPage(cls: any, _params: NavParams): Page { const sourceUri = inc.sourceUri ?? `includes/${includeType}`; // Build full URI: /sap/bc/adt/oo/classes/{className}/{sourceUri} const uri = `/sap/bc/adt/oo/classes/${name.toLowerCase()}/${sourceUri}`; - return Field(includeType, adtLink({ name: `${name} (${includeType})`, uri, type: 'CLAS/I' })); + return Field( + includeType, + adtLink({ name: `${name} (${includeType})`, uri, type: 'CLAS/I' }), + ); }); sections.push(Section(`▼ Includes (${includes.length})`, ...includeFields)); } - + // Metadata section const responsible = cls?.responsible ?? '-'; const masterLanguage = cls?.masterLanguage ?? '-'; @@ -127,7 +154,7 @@ function renderClassPage(cls: any, _params: NavParams): Page { const changedBy = cls?.changedBy ?? '-'; const createdAt = cls?.createdAt; const changedAt = cls?.changedAt; - + const metaFields: Component[] = [ Field('Responsible', responsible), Field('Master Language', masterLanguage), @@ -139,16 +166,16 @@ function renderClassPage(cls: any, _params: NavParams): Page { Field('Changed At', formatDate(changedAt)), ]; sections.push(Section('▼ Metadata', ...metaFields)); - + const content = Box(...sections); - + const page: Page = { title: `Class: ${name}`, icon: '🔷', render: () => content.render(), print: () => {}, }; - + page.print = createPrintFn(page); return page; } @@ -162,7 +189,7 @@ function renderClassPage(cls: any, _params: NavParams): Page { * * Self-registers with the router on import. * Type: CLAS (ABAP Class) - * + * * Usage: * ```ts * const page = await router.navTo(client, 'CLAS', { name: 'ZCL_MY_CLASS' }); @@ -177,7 +204,7 @@ export default definePage({ // Use client's OO contract to fetch class data fetch: async (client, params) => { if (!params.name) throw new Error('Class name is required'); - return await client.adt.oo.classes.get(params.name) as ClassResponse; + return (await client.adt.oo.classes.get(params.name)) as ClassResponse; }, render: renderClassPage, diff --git a/packages/adt-cli/src/lib/ui/pages/discovery.ts b/packages/adt-cli/src/lib/ui/pages/discovery.ts index 0fe29941..75c7ac94 100644 --- a/packages/adt-cli/src/lib/ui/pages/discovery.ts +++ b/packages/adt-cli/src/lib/ui/pages/discovery.ts @@ -28,15 +28,23 @@ export interface DiscoveryParams extends NavParams { /** * Render discovery data as a Page */ -function renderDiscoveryPage(data: DiscoveryData, params: DiscoveryParams): Page { +function renderDiscoveryPage( + data: DiscoveryData, + params: DiscoveryParams, +): Page { // Access service.workspace from discovery response const service = data?.service; - const workspaces = (service?.workspace ?? []) as Array<{ title?: string; collection?: unknown }>; + const workspaces = (service?.workspace ?? []) as Array<{ + title?: string; + collection?: unknown; + }>; const filter = params.filter?.toLowerCase(); // Filter workspaces if filter provided const filteredWorkspaces = filter - ? workspaces.filter((ws: { title?: string }) => ws.title?.toLowerCase().includes(filter)) + ? workspaces.filter((ws: { title?: string }) => + ws.title?.toLowerCase().includes(filter), + ) : workspaces; // Build content @@ -47,8 +55,8 @@ function renderDiscoveryPage(data: DiscoveryData, params: DiscoveryParams): Page Box( Field('Total Workspaces', String(workspaces.length)), Field('Showing', String(filteredWorkspaces.length)), - ...(filter ? [Field('Filter', filter)] : []) - ) + ...(filter ? [Field('Filter', filter)] : []), + ), ); // Each workspace as a section @@ -60,36 +68,46 @@ function renderDiscoveryPage(data: DiscoveryData, params: DiscoveryParams): Page : []; // Build collection items - const collectionComponents: Component[] = collections.map((coll: { title?: string; href?: string; category?: unknown; templateLinks?: { templateLink?: unknown } }) => { - const categories = Array.isArray(coll.category) - ? coll.category - : coll.category - ? [coll.category] - : []; - const categoryTerms = categories - .map((c: { term?: string }) => c.term) - .filter(Boolean) - .join(', '); - - const templateCount = Array.isArray(coll.templateLinks?.templateLink) - ? coll.templateLinks.templateLink.length - : coll.templateLinks?.templateLink - ? 1 - : 0; - - const info = [ - categoryTerms ? `[${categoryTerms}]` : '', - templateCount > 0 ? `(${templateCount} templates)` : '', - ] - .filter(Boolean) - .join(' '); - - return Text(` └─ ${coll.title || '-'} ${coll.href} ${info}`); - }); + const collectionComponents: Component[] = collections.map( + (coll: { + title?: string; + href?: string; + category?: unknown; + templateLinks?: { templateLink?: unknown }; + }) => { + const categories = Array.isArray(coll.category) + ? coll.category + : coll.category + ? [coll.category] + : []; + const categoryTerms = categories + .map((c: { term?: string }) => c.term) + .filter(Boolean) + .join(', '); + + const templateCount = Array.isArray(coll.templateLinks?.templateLink) + ? coll.templateLinks.templateLink.length + : coll.templateLinks?.templateLink + ? 1 + : 0; + + const info = [ + categoryTerms ? `[${categoryTerms}]` : '', + templateCount > 0 ? `(${templateCount} templates)` : '', + ] + .filter(Boolean) + .join(' '); + + return Text(` └─ ${coll.title || '-'} ${coll.href} ${info}`); + }, + ); if (collectionComponents.length > 0) { sections.push( - Section(`📁 ${workspace.title || 'Unnamed Workspace'}`, ...collectionComponents) + Section( + `📁 ${workspace.title || 'Unnamed Workspace'}`, + ...collectionComponents, + ), ); } } @@ -119,7 +137,7 @@ function renderDiscoveryPage(data: DiscoveryData, params: DiscoveryParams): Page */ export default function DiscoveryPage( data: DiscoveryData, - params: DiscoveryParams = {} + params: DiscoveryParams = {}, ): Page { return renderDiscoveryPage(data, params); } diff --git a/packages/adt-cli/src/lib/ui/pages/interface.ts b/packages/adt-cli/src/lib/ui/pages/interface.ts index 14ff6a44..0dceb44c 100644 --- a/packages/adt-cli/src/lib/ui/pages/interface.ts +++ b/packages/adt-cli/src/lib/ui/pages/interface.ts @@ -29,7 +29,6 @@ function formatDate(date: Date | string | undefined): string { }); } - // ============================================================================= // Render Functions // ============================================================================= @@ -39,44 +38,57 @@ function formatDate(date: Date | string | undefined): string { */ function renderInterfacePage(intf: any, _params: NavParams): Page { const sections: Component[] = []; - + // Extract values with defaults for optional fields const name = intf?.name ?? ''; const type = intf?.type ?? 'INTF/OI'; const description = intf?.description ?? '-'; - + // Header section with core info const headerFields: Component[] = [ Field('Name', adtLink({ name, type })), Field('Type', type), Field('Description', description), ]; - + // Package link const pkgRef = intf?.packageRef; if (pkgRef?.name) { headerFields.push(Field('Package', adtLink({ ...pkgRef, type: 'DEVC/K' }))); } - + sections.push(Section('▼ Interface', ...headerFields)); - + // Interface attributes section - only show non-default values const intfFields: Component[] = []; if (intf?.modeled) intfFields.push(Field('Modeled', '✓ Yes')); if (intfFields.length > 0) { sections.push(Section('▼ Interface Attributes', ...intfFields)); } - + // Inherited interfaces (very useful navigation!) const interfaces = intf?.interfaceRef ?? []; if (interfaces.length > 0) { - type InterfaceRef = { name?: string; uri?: string; type?: string; description?: string }; - const inheritedFields = interfaces.map((ref: InterfaceRef) => - Field(adtLink({ ...ref, type: ref.type || 'INTF/OI' }), ref.description ?? '') + type InterfaceRef = { + name?: string; + uri?: string; + type?: string; + description?: string; + }; + const inheritedFields = interfaces.map((ref: InterfaceRef) => + Field( + adtLink({ ...ref, type: ref.type || 'INTF/OI' }), + ref.description ?? '', + ), + ); + sections.push( + Section( + `▼ Inherited Interfaces (${interfaces.length})`, + ...inheritedFields, + ), ); - sections.push(Section(`▼ Inherited Interfaces (${interfaces.length})`, ...inheritedFields)); } - + // Metadata section const responsible = intf?.responsible ?? '-'; const masterLanguage = intf?.masterLanguage ?? '-'; @@ -86,7 +98,7 @@ function renderInterfacePage(intf: any, _params: NavParams): Page { const changedBy = intf?.changedBy ?? '-'; const createdAt = intf?.createdAt; const changedAt = intf?.changedAt; - + const metaFields: Component[] = [ Field('Responsible', responsible), Field('Master Language', masterLanguage), @@ -98,16 +110,16 @@ function renderInterfacePage(intf: any, _params: NavParams): Page { Field('Changed At', formatDate(changedAt)), ]; sections.push(Section('▼ Metadata', ...metaFields)); - + const content = Box(...sections); - + const page: Page = { title: `Interface: ${name}`, icon: '🔶', render: () => content.render(), print: () => {}, }; - + page.print = createPrintFn(page); return page; } @@ -121,7 +133,7 @@ function renderInterfacePage(intf: any, _params: NavParams): Page { * * Self-registers with the router on import. * Type: INTF (ABAP Interface) - * + * * Usage: * ```ts * const page = await router.navTo(client, 'INTF', { name: 'IF_MY_INTERFACE' }); @@ -136,7 +148,9 @@ export default definePage({ // Use client's OO contract to fetch interface data fetch: async (client, params) => { if (!params.name) throw new Error('Interface name is required'); - return await client.adt.oo.interfaces.get(params.name) as InterfaceResponse; + return (await client.adt.oo.interfaces.get( + params.name, + )) as InterfaceResponse; }, render: renderInterfacePage, diff --git a/packages/adt-cli/src/lib/ui/pages/package.ts b/packages/adt-cli/src/lib/ui/pages/package.ts index 59ae8b63..cdd7d8e8 100644 --- a/packages/adt-cli/src/lib/ui/pages/package.ts +++ b/packages/adt-cli/src/lib/ui/pages/package.ts @@ -37,7 +37,7 @@ function formatDate(date: Date | undefined): string { */ function renderPackagePage(pkg: PackageXml, _params: NavParams): Page { const sections: Component[] = []; - + // Extract values with defaults for optional fields const name = pkg?.name ?? ''; const type = pkg?.type ?? 'DEVC/K'; @@ -46,7 +46,7 @@ function renderPackagePage(pkg: PackageXml, _params: NavParams): Page { const transport = pkg?.transport; const appComponent = pkg?.applicationComponent; const superPkg = pkg?.superPackage; - + // Header section with core info const headerFields: Component[] = [ Field('Name', adtLink({ name, type })), @@ -54,7 +54,7 @@ function renderPackagePage(pkg: PackageXml, _params: NavParams): Page { Field('Description', description), ]; sections.push(Section('▼ Package', ...headerFields)); - + // Package attributes section const attrFields: Component[] = [ Field('Package Type', String(attrs?.packageType ?? '-')), @@ -66,14 +66,14 @@ function renderPackagePage(pkg: PackageXml, _params: NavParams): Page { Field('Record Changes', attrs?.recordChanges ?? false), Field('Language Version', attrs?.languageVersion ?? '-'), ]; - + // Super package link if (superPkg?.name) { attrFields.push(Field('Super Package', adtLink(superPkg))); } - + sections.push(Section('▼ Attributes', ...attrFields)); - + // Metadata section const responsible = pkg?.responsible ?? '-'; const masterLanguage = pkg?.masterLanguage ?? '-'; @@ -83,39 +83,52 @@ function renderPackagePage(pkg: PackageXml, _params: NavParams): Page { const changedBy = pkg?.changedBy ?? '-'; const createdAt = pkg?.createdAt; const changedAt = pkg?.changedAt; - + const metaFields: Component[] = [ Field('Responsible', responsible), Field('Master Language', masterLanguage), Field('Language', language), Field('Version', version), Field('Created By', createdBy), - Field('Created At', formatDate(createdAt ? new Date(createdAt as string) : undefined)), + Field( + 'Created At', + formatDate(createdAt ? new Date(createdAt as string) : undefined), + ), Field('Changed By', changedBy), - Field('Changed At', formatDate(changedAt ? new Date(changedAt as string) : undefined)), + Field( + 'Changed At', + formatDate(changedAt ? new Date(changedAt as string) : undefined), + ), ]; sections.push(Section('▼ Metadata', ...metaFields)); - + // Subpackages section // Note: Subpackages are included in the package data if present const subPkgs = pkg?.subPackages?.packageRef ?? []; if (subPkgs.length > 0) { - type PackageRef = { name?: string; uri?: string; type?: string; description?: string }; - const subPkgFields = subPkgs.map((ref: PackageRef) => - Field(adtLink(ref), ref.description ?? '') + type PackageRef = { + name?: string; + uri?: string; + type?: string; + description?: string; + }; + const subPkgFields = subPkgs.map((ref: PackageRef) => + Field(adtLink(ref), ref.description ?? ''), + ); + sections.push( + Section(`▼ Subpackages (${subPkgs.length})`, ...subPkgFields), ); - sections.push(Section(`▼ Subpackages (${subPkgs.length})`, ...subPkgFields)); } - + const content = Box(...sections); - + const page: Page = { title: `Package: ${name}`, icon: '📦', render: () => content.render(), print: () => {}, }; - + page.print = createPrintFn(page); return page; } @@ -129,7 +142,7 @@ function renderPackagePage(pkg: PackageXml, _params: NavParams): Page { * * Self-registers with the router on import. * Type: DEVC (Development Class / Package) - * + * * Usage: * ```ts * const page = await router.navTo(client, 'DEVC', { name: '$TMP' }); diff --git a/packages/adt-cli/src/lib/utils/format-loader.ts b/packages/adt-cli/src/lib/utils/format-loader.ts index 37391cd2..ce43611b 100644 --- a/packages/adt-cli/src/lib/utils/format-loader.ts +++ b/packages/adt-cli/src/lib/utils/format-loader.ts @@ -13,8 +13,8 @@ const BUNDLED_PLUGINS: Record = { * Format shortcuts - map short names to actual package names */ const FORMAT_SHORTCUTS: Record = { - 'oat': '@abapify/oat', - 'abapgit': '@abapify/adt-plugin-abapgit', + oat: '@abapify/oat', + abapgit: '@abapify/adt-plugin-abapgit', }; /** @@ -72,7 +72,8 @@ export async function loadFormatPlugin(formatSpec: string) { } // Use bundled plugin if available, otherwise try dynamic import - const pluginModule = BUNDLED_PLUGINS[packageName] ?? await import(packageName); + const pluginModule = + BUNDLED_PLUGINS[packageName] ?? (await import(packageName)); const PluginClass = pluginModule.default || pluginModule[Object.keys(pluginModule)[0]]; @@ -96,10 +97,15 @@ export async function loadFormatPlugin(formatSpec: string) { instance: plugin, preset, }; - } catch (error: any) { - if (error?.code === 'MODULE_NOT_FOUND') { + } catch (error: unknown) { + const err = error as Error; + // Check both error code (CommonJS) and message (ES modules) + if ( + (err as any).code === 'MODULE_NOT_FOUND' || + err.message?.includes(`Cannot find module '${packageName}'`) + ) { throw new Error( - `Plugin package '${packageName}' not found. Install it with: npm install ${packageName}` + `Plugin package '${packageName}' not found. Install it with: bun add ${packageName}`, ); } throw error; diff --git a/packages/adt-cli/src/lib/utils/logger-config.ts b/packages/adt-cli/src/lib/utils/logger-config.ts index c247398b..f8c11f25 100644 --- a/packages/adt-cli/src/lib/utils/logger-config.ts +++ b/packages/adt-cli/src/lib/utils/logger-config.ts @@ -68,7 +68,7 @@ export function createCliLogger(options: LoggerOptions = {}): Logger { */ function createFilteredLogger( baseLogger: any, - allowedComponents: string[] + allowedComponents: string[], ): Logger { return { trace: (msg: string, obj?: any) => { diff --git a/packages/adt-cli/tsconfig.lib.json b/packages/adt-cli/tsconfig.lib.json index 00b5c262..de3311fd 100644 --- a/packages/adt-cli/tsconfig.lib.json +++ b/packages/adt-cli/tsconfig.lib.json @@ -43,7 +43,7 @@ "path": "../adt-client" }, { - "path": "../adt-auth" + "path": "../adt-auth/tsconfig.lib.json" }, { "path": "../adk/tsconfig.lib.json" diff --git a/packages/adt-client/src/adapter.ts b/packages/adt-client/src/adapter.ts index 483fc3c0..83854ec1 100644 --- a/packages/adt-client/src/adapter.ts +++ b/packages/adt-client/src/adapter.ts @@ -6,10 +6,7 @@ */ import type { AdtConnectionConfig } from './types'; -import type { - HttpAdapter, - HttpRequestOptions, -} from '@abapify/adt-contracts'; +import type { HttpAdapter, HttpRequestOptions } from '@abapify/adt-contracts'; import type { ResponsePlugin, ResponseContext } from './plugins/types'; import { SessionManager } from './utils/session'; import { createAdtError } from './errors'; @@ -23,7 +20,7 @@ export type { HttpAdapter }; export interface AdtAdapterConfig extends AdtConnectionConfig { /** Response plugins for intercepting and transforming responses */ plugins?: ResponsePlugin[]; - /** + /** * Callback when session expires (SAML redirect detected) * Return new cookie header to retry the request, or throw to abort */ @@ -64,14 +61,17 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { return { async request( - options: HttpRequestOptions + options: HttpRequestOptions, ): Promise { logger?.debug('=== ADAPTER REQUEST START ==='); logger?.debug('options.url:', options.url); logger?.debug('options.method:', options.method); logger?.debug('options.body:', options.body ? 'present' : 'undefined'); - logger?.debug('options.bodySchema:', options.bodySchema ? 'present' : 'undefined'); - + logger?.debug( + 'options.bodySchema:', + options.bodySchema ? 'present' : 'undefined', + ); + // Build full URL const url = new URL(options.url, baseUrl); @@ -92,19 +92,31 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { // For write operations, ensure CSRF token is initialized const needsCsrf = ['POST', 'PUT', 'DELETE', 'PATCH'].includes( - options.method.toUpperCase() + options.method.toUpperCase(), ); if (needsCsrf && !sessionManager.hasCsrfToken()) { - logger?.debug('Adapter: Initializing CSRF token before write operation'); - const authForCsrf = authHeader || (cookieHeader ? undefined : undefined); + logger?.debug( + 'Adapter: Initializing CSRF token before write operation', + ); + const authForCsrf = + authHeader || (cookieHeader ? undefined : undefined); if (authForCsrf) { - await sessionManager.initializeCsrf(baseUrl, authForCsrf, client, language); + await sessionManager.initializeCsrf( + baseUrl, + authForCsrf, + client, + language, + ); } else if (cookieHeader) { // For cookie auth, make a GET request to sessions endpoint to get CSRF - const sessionsUrl = new URL('/sap/bc/adt/core/http/sessions', baseUrl); + const sessionsUrl = new URL( + '/sap/bc/adt/core/http/sessions', + baseUrl, + ); if (client) sessionsUrl.searchParams.append('sap-client', client); - if (language) sessionsUrl.searchParams.append('sap-language', language); - + if (language) + sessionsUrl.searchParams.append('sap-language', language); + const csrfHeaders: Record = { 'x-csrf-token': 'Fetch', Accept: 'application/vnd.sap.adt.core.http.session.v3+xml', @@ -112,7 +124,7 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { }; const cookieHeader2 = sessionManager.getCookieHeader(); if (cookieHeader2) csrfHeaders.Cookie = cookieHeader2; - + try { const csrfResponse = await fetch(sessionsUrl.toString(), { method: 'GET', @@ -120,7 +132,9 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { }); if (csrfResponse.ok) { sessionManager.processResponse(csrfResponse); - logger?.debug('Adapter: CSRF token initialized from sessions endpoint'); + logger?.debug( + 'Adapter: CSRF token initialized from sessions endpoint', + ); } } catch (e) { logger?.warn('Adapter: Failed to initialize CSRF token'); @@ -142,10 +156,17 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { // Get schemas from speci's standard fields // Check if bodySchema is Serializable (has build method from adt-schemas) - let bodySerializableSchema: { build: (data: unknown) => string } | undefined; + let bodySerializableSchema: + | { build: (data: unknown) => string } + | undefined; if (options.bodySchema && typeof options.bodySchema === 'object') { - if ('build' in options.bodySchema && typeof options.bodySchema.build === 'function') { - bodySerializableSchema = options.bodySchema as { build: (data: unknown) => string }; + if ( + 'build' in options.bodySchema && + typeof options.bodySchema.build === 'function' + ) { + bodySerializableSchema = options.bodySchema as { + build: (data: unknown) => string; + }; } } @@ -157,7 +178,10 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { logger?.debug('Schema detection:', { hasSchema: !!schema200, type: typeof schema200, - keys: schema200 && typeof schema200 === 'object' ? Object.keys(schema200) : [], + keys: + schema200 && typeof schema200 === 'object' + ? Object.keys(schema200) + : [], }); if ( schema200 && @@ -175,28 +199,58 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { logger?.debug('Request URL: ' + options.url); logger?.debug('Request method: ' + options.method); - logger?.debug('options.body: ' + (options.body ? JSON.stringify(options.body).substring(0, 500) : 'UNDEFINED')); - logger?.debug('options.bodySchema: ' + (options.bodySchema ? 'present' : 'undefined')); - logger?.debug('bodySerializableSchema: ' + (bodySerializableSchema ? 'present' : 'undefined')); + logger?.debug( + 'options.body: ' + + (options.body + ? JSON.stringify(options.body).substring(0, 500) + : 'UNDEFINED'), + ); + logger?.debug( + 'options.bodySchema: ' + (options.bodySchema ? 'present' : 'undefined'), + ); + logger?.debug( + 'bodySerializableSchema: ' + + (bodySerializableSchema ? 'present' : 'undefined'), + ); logger?.debug('Body type: ' + typeof body); - logger?.debug('Body value: ' + (body ? JSON.stringify(body).substring(0, 500) : 'UNDEFINED/NULL')); + logger?.debug( + 'Body value: ' + + (body ? JSON.stringify(body).substring(0, 500) : 'UNDEFINED/NULL'), + ); if (body !== undefined && body !== null) { if (typeof body === 'string') { requestBody = body; logger?.debug('Body: using raw string'); - logger?.debug('Body content (first 200 chars):', requestBody.substring(0, 200)); + logger?.debug( + 'Body content (first 200 chars):', + requestBody.substring(0, 200), + ); } else if (bodySerializableSchema) { // Use Serializable schema's build method (from adt-schemas) try { - logger?.debug('Calling bodySerializableSchema.build with body: ' + JSON.stringify(body).substring(0, 300)); + logger?.debug( + 'Calling bodySerializableSchema.build with body: ' + + JSON.stringify(body).substring(0, 300), + ); requestBody = bodySerializableSchema.build(body); logger?.debug('Body: serialized using Serializable.build()'); logger?.debug('Body output type: ' + typeof requestBody); logger?.debug('Body output length: ' + requestBody?.length); - logger?.debug('Body content (first 500 chars): ' + requestBody?.substring(0, 500)); + logger?.debug( + 'Body content (first 500 chars): ' + + requestBody?.substring(0, 500), + ); } catch (buildError) { - logger?.error('Schema build() threw error: ' + (buildError instanceof Error ? buildError.message : String(buildError))); - logger?.error('Stack: ' + (buildError instanceof Error ? buildError.stack : 'N/A')); + logger?.error( + 'Schema build() threw error: ' + + (buildError instanceof Error + ? buildError.message + : String(buildError)), + ); + logger?.error( + 'Stack: ' + + (buildError instanceof Error ? buildError.stack : 'N/A'), + ); throw buildError; } } else { @@ -219,19 +273,23 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { // Check for HTTP errors if (!response.ok) { const errorBody = await response.text(); - + // Create structured ADT error with parsed exception details const adtError = createAdtError( response.status, response.statusText, url.toString(), options.method, - errorBody + errorBody, + ); + + logger?.error( + `Request failed - ${adtError.message} (${options.method} ${url.toString()})`, ); - - logger?.error(`Request failed - ${adtError.message} (${options.method} ${url.toString()})`); if (adtError.exception) { - logger?.error(`ADT Exception: namespace=${adtError.exception.namespace}, type=${adtError.exception.type}`); + logger?.error( + `ADT Exception: namespace=${adtError.exception.namespace}, type=${adtError.exception.type}`, + ); } if (errorBody && !adtError.exception) { // Log raw body only if we couldn't parse it as ADT exception @@ -252,10 +310,13 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { // Detect SAML redirect (server returns 200 OK with HTML containing SAMLRequest form) // This happens when the session cookie has expired - if (contentType.includes('text/html') && rawText.includes('SAMLRequest')) { + if ( + contentType.includes('text/html') && + rawText.includes('SAMLRequest') + ) { sessionManager.clear(); logger?.warn('SAML redirect detected - session expired'); - + // If callback provided, try to re-authenticate and retry the request if (onSessionExpired) { logger?.info('Attempting automatic re-authentication...'); @@ -270,13 +331,16 @@ export function createAdtAdapter(config: AdtAdapterConfig): HttpAdapter { throw new Error('Session expired - re-authentication failed'); } } - + throw new Error('Session expired - SAML re-authentication required'); } let data: any; // Check for JSON content (including vendor-specific types like application/vnd.sap.*+json) - if (contentType.includes('application/json') || contentType.includes('+json')) { + if ( + contentType.includes('application/json') || + contentType.includes('+json') + ) { data = JSON.parse(rawText); } else if (contentType.includes('text/') || contentType.includes('xml')) { // If serializable schema available (has parse method), use it diff --git a/packages/adt-client/src/client.ts b/packages/adt-client/src/client.ts index 2172795f..5e626e9f 100644 --- a/packages/adt-client/src/client.ts +++ b/packages/adt-client/src/client.ts @@ -4,13 +4,17 @@ * Provides typed access to SAP ADT REST APIs: * - client.adt.* - Typed ADT REST contracts (speci-generated) * - client.fetch() - Generic HTTP utility for raw requests - * + * * Note: Business logic (transport management, etc.) has moved to @abapify/adk * Use AdkTransportRequest for transport operations. */ import { createAdtAdapter, type AdtAdapterConfig } from './adapter'; -import { createAdtClient as createAdtContractClient, type AdtClientType, type HttpRequestOptions } from '@abapify/adt-contracts'; +import { + createAdtClient as createAdtContractClient, + type AdtClientType, + type HttpRequestOptions, +} from '@abapify/adt-contracts'; import { createTransportService, type TransportService } from './services'; /** @@ -43,7 +47,7 @@ export interface FetchOptions { * method: 'GET', * headers: { Accept: 'application/xml' } * }); - * + * * // For business logic, use ADK: * // import { initializeAdk, AdkTransportRequest } from '@abapify/adk'; * // initializeAdk(client); @@ -75,7 +79,10 @@ export function createAdtClient(config: AdtAdapterConfig): AdtClientReturn { }); // Create fetch function for raw HTTP access - const fetchFn = async (url: string, options?: FetchOptions): Promise => { + const fetchFn = async ( + url: string, + options?: FetchOptions, + ): Promise => { const method = options?.method || 'GET'; const headers = options?.headers || {}; const body = options?.body; diff --git a/packages/adt-client/src/errors.ts b/packages/adt-client/src/errors.ts index 868b6d5b..4cdbc071 100644 --- a/packages/adt-client/src/errors.ts +++ b/packages/adt-client/src/errors.ts @@ -1,6 +1,6 @@ /** * ADT Error Handling - * + * * SAP ADT returns errors in a standard XML format defined by exception.xsd: * * @@ -11,11 +11,17 @@ * value1 * * - * + * * Uses the generated exception schema from @abapify/adt-schemas for type-safe parsing. */ -import { exception as exceptionSchema, type ExceptionSchema } from '@abapify/adt-schemas'; +import { + exception as exceptionSchema, + type InferTypedSchema, +} from '@abapify/adt-schemas'; + +/** Exception schema type - inferred from the typed schema */ +type ExceptionSchema = InferTypedSchema; /** * Parsed ADT exception structure - derived from ExceptionSchema @@ -38,7 +44,7 @@ export type { ExceptionSchema }; /** * Custom error class for ADT exceptions - * + * * Provides structured access to SAP ADT error details. */ export class AdtError extends Error { @@ -65,9 +71,10 @@ export class AdtError extends Error { }) { // Build a meaningful error message const baseMsg = `HTTP ${options.status}: ${options.statusText}`; - const detailMsg = options.exception?.message || options.exception?.localizedMessage; + const detailMsg = + options.exception?.message || options.exception?.localizedMessage; const fullMsg = detailMsg ? `${baseMsg} - ${detailMsg}` : baseMsg; - + super(fullMsg); this.name = 'AdtError'; this.status = options.status; @@ -76,7 +83,7 @@ export class AdtError extends Error { this.method = options.method; this.rawBody = options.rawBody; this.exception = options.exception; - + // Maintain proper stack trace in V8 environments if (Error.captureStackTrace) { Error.captureStackTrace(this, AdtError); @@ -87,7 +94,11 @@ export class AdtError extends Error { * Get the most relevant error message */ get detailMessage(): string { - return this.exception?.localizedMessage || this.exception?.message || this.statusText; + return ( + this.exception?.localizedMessage || + this.exception?.message || + this.statusText + ); } /** @@ -114,12 +125,15 @@ export class AdtError extends Error { /** * Parse ADT exception XML into structured data - * + * * Uses the generated exception schema from @abapify/adt-schemas for type-safe parsing. */ export function parseAdtException(xml: string): AdtExceptionData | undefined { // Quick check if this looks like an ADT exception - if (!xml.includes('exception') || !xml.includes('http://www.sap.com/abapxml/types/communicationframework')) { + if ( + !xml.includes('exception') || + !xml.includes('http://www.sap.com/abapxml/types/communicationframework') + ) { return undefined; } @@ -127,7 +141,7 @@ export function parseAdtException(xml: string): AdtExceptionData | undefined { // Use the generated schema for type-safe parsing const parsed = exceptionSchema.parse(xml); const exc = parsed.exception; - + if (!exc) { return undefined; } @@ -150,8 +164,8 @@ export function parseAdtException(xml: string): AdtExceptionData | undefined { } if (exc.properties?.entry) { result.properties = {}; - const entries = Array.isArray(exc.properties.entry) - ? exc.properties.entry + const entries = Array.isArray(exc.properties.entry) + ? exc.properties.entry : [exc.properties.entry]; for (const entry of entries) { if (entry.key && entry.$value) { @@ -161,7 +175,12 @@ export function parseAdtException(xml: string): AdtExceptionData | undefined { } // Return undefined if we didn't find any meaningful data - if (!result.namespace && !result.type && !result.message && !result.localizedMessage) { + if ( + !result.namespace && + !result.type && + !result.message && + !result.localizedMessage + ) { return undefined; } @@ -180,7 +199,7 @@ export function createAdtError( statusText: string, url: string, method: string, - rawBody: string + rawBody: string, ): AdtError { const exception = parseAdtException(rawBody); return new AdtError({ diff --git a/packages/adt-client/src/index.ts b/packages/adt-client/src/index.ts index 7d94eba0..347b44f7 100644 --- a/packages/adt-client/src/index.ts +++ b/packages/adt-client/src/index.ts @@ -7,18 +7,12 @@ // Export main client factory export { createAdtClient, type AdtClient } from './client'; -// Legacy compatibility - AdtClientImpl was the old class name -// TODO: Migrate CLI commands to use createAdtClient() and remove this -/** @deprecated Use createAdtClient() instead */ -export { createAdtClient as AdtClientImpl } from './client'; - // Export contract for advanced use cases export { adtContract, type AdtContract } from '@abapify/adt-contracts'; // Export types export type { AdtConnectionConfig, - AdtRestContract, OperationResult, LockHandle, AdtError, @@ -46,14 +40,14 @@ export { } from './plugins'; // Export session management -export { - SessionManager, - CookieStore, - CsrfTokenManager, -} from './utils/session'; +export { SessionManager, CookieStore, CsrfTokenManager } from './utils/session'; // Re-export contract types needed for declaration generation -export type { RestEndpointDescriptor, Serializable, RestContract } from '@abapify/adt-contracts'; +export type { + RestEndpointDescriptor, + Serializable, + RestContract, +} from '@abapify/adt-contracts'; // Re-export CRUD contract types for ADK consumers // This allows ADK to use typed CRUD contracts without depending on adt-contracts directly diff --git a/packages/adt-client/src/services/index.ts b/packages/adt-client/src/services/index.ts index 3f77dccd..8c22985c 100644 --- a/packages/adt-client/src/services/index.ts +++ b/packages/adt-client/src/services/index.ts @@ -1,11 +1,11 @@ /** * Services Layer - Business logic orchestration - * + * * Architecture: * - Contracts (client.adt.*) = granular HTTP operations * - Services (client.services.*) = business logic orchestration * - ADK = object-focused logic (client-agnostic) - * + * * Services bridge contracts and provide higher-level operations * that CLI and SDK consumers need. */ diff --git a/packages/adt-client/src/services/transports.ts b/packages/adt-client/src/services/transports.ts index 75177d6e..6249c253 100644 --- a/packages/adt-client/src/services/transports.ts +++ b/packages/adt-client/src/services/transports.ts @@ -1,10 +1,10 @@ /** * Transport Service - Business logic layer for CTS operations - * + * * Bridges the gap between: * - Contracts (granular HTTP operations) * - ADK (object-focused logic) - * + * * Provides orchestrated transport operations for CLI and SDK consumers. */ @@ -34,7 +34,7 @@ export interface TransportTask { */ export interface CreateTransportOptions { description: string; - type?: 'K' | 'W'; // K = Workbench, W = Customizing + type?: 'K' | 'W'; // K = Workbench, W = Customizing target?: string; project?: string; owner?: string; @@ -59,11 +59,11 @@ export class TransportService { */ async list(options?: ListTransportsOptions): Promise { const response = await this.adt.cts.transportrequests.list(options); - + // Transform contract response to service format // The response structure is: { request: [...] } or single request const requests = this.extractRequests(response); - + return requests.map((req) => this.mapToTransport(req)); } @@ -72,7 +72,7 @@ export class TransportService { */ async get(trkorr: string): Promise { const response = await this.adt.cts.transportrequests.get(trkorr); - + // Single transport response has root/request structure const request = (response as Record)?.request ?? response; return this.mapToTransport(request); @@ -80,17 +80,17 @@ export class TransportService { /** * Create a new transport request - * + * * Note: Full create implementation requires XML body building. * For now, this is a placeholder that throws a helpful error. * Use ADK's AdkTransportRequest.create() for full functionality. */ async create(_options: CreateTransportOptions): Promise { - // TODO: Implement XML body building for transport creation + // NOTE: XML body building for transport creation not yet implemented // The contract exists but we need to build the request XML throw new Error( 'Transport creation via service layer not yet implemented. ' + - 'Use ADK\'s AdkTransportRequest.create() for now.' + "Use ADK's AdkTransportRequest.create() for now.", ); } @@ -103,15 +103,13 @@ export class TransportService { /** * Release a transport request - * + * * Note: Release requires POST with specific action parameter. * This is a placeholder for the full implementation. */ async release(_trkorr: string): Promise { - // TODO: Implement release action - throw new Error( - 'Transport release via service layer not yet implemented.' - ); + // NOTE: Release action not yet implemented via service layer + throw new Error('Transport release via service layer not yet implemented.'); } /** @@ -119,29 +117,29 @@ export class TransportService { */ private extractRequests(response: unknown): unknown[] { if (!response) return []; - + const data = response as Record; - + // Format 1: { request: [...] } if (Array.isArray(data.request)) { return data.request; } - + // Format 2: { request: { ... } } (single) if (data.request && typeof data.request === 'object') { return [data.request]; } - + // Format 3: Direct array if (Array.isArray(response)) { return response; } - + // Format 4: Root wrapper { root: { request: [...] } } if (data.root && typeof data.root === 'object') { return this.extractRequests(data.root); } - + return []; } @@ -150,14 +148,24 @@ export class TransportService { */ private mapToTransport(req: unknown): Transport { const data = req as Record; - + return { number: String(data.trkorr ?? data.number ?? ''), - desc: data.as4text as string | undefined ?? data.desc as string | undefined, - owner: data.as4user as string | undefined ?? data.owner as string | undefined, - status: data.trstatus as string | undefined ?? data.status as string | undefined, - type: data.trfunction as string | undefined ?? data.type as string | undefined, - target: data.tarsystem as string | undefined ?? data.target as string | undefined, + desc: + (data.as4text as string | undefined) ?? + (data.desc as string | undefined), + owner: + (data.as4user as string | undefined) ?? + (data.owner as string | undefined), + status: + (data.trstatus as string | undefined) ?? + (data.status as string | undefined), + type: + (data.trfunction as string | undefined) ?? + (data.type as string | undefined), + target: + (data.tarsystem as string | undefined) ?? + (data.target as string | undefined), tasks: this.extractTasks(data), }; } @@ -167,17 +175,20 @@ export class TransportService { */ private extractTasks(data: Record): TransportTask[] { const tasks = data.task ?? data.tasks; - + if (!tasks) return []; - + const taskArray = Array.isArray(tasks) ? tasks : [tasks]; - + return taskArray.map((task) => { const t = task as Record; return { number: String(t.trkorr ?? t.number ?? ''), - owner: t.as4user as string | undefined ?? t.owner as string | undefined, - status: t.trstatus as string | undefined ?? t.status as string | undefined, + owner: + (t.as4user as string | undefined) ?? (t.owner as string | undefined), + status: + (t.trstatus as string | undefined) ?? + (t.status as string | undefined), }; }); } diff --git a/packages/adt-client/src/types.ts b/packages/adt-client/src/types.ts index 696779bf..3d01071f 100644 --- a/packages/adt-client/src/types.ts +++ b/packages/adt-client/src/types.ts @@ -3,7 +3,6 @@ */ import type { Logger } from '@abapify/logger'; -import type { RestContract } from '@abapify/adt-contracts'; // Re-export Logger for convenience export type { Logger }; @@ -19,12 +18,6 @@ export interface AdtConnectionConfig { logger?: Logger; } -/** - * ADT REST Contract - * @deprecated Use RestContract from @abapify/adt-contracts directly - */ -export type AdtRestContract = RestContract; - // Note: Class/Interface types are available from adt-schemas via InferXsd // Example: import { classes, InferXsd } from 'adt-schemas'; // type ClassData = InferXsd; diff --git a/packages/adt-codegen/src/commands/codegen.ts b/packages/adt-codegen/src/commands/codegen.ts index 962033ad..54513ff6 100644 --- a/packages/adt-codegen/src/commands/codegen.ts +++ b/packages/adt-codegen/src/commands/codegen.ts @@ -1,9 +1,9 @@ /** * Codegen Command Plugin - * + * * CLI-agnostic command for code generation from ADT discovery data. * This is the main plugin command with subcommands like 'contracts'. - * + * * NOTE: This plugin expects config to be loaded by the CLI and passed via ctx.config. * It does NOT load config itself - that's the CLI's responsibility. */ @@ -17,31 +17,33 @@ import { contractsCommand } from './contracts'; export const codegenCommand: CliCommandPlugin = { name: 'codegen', description: 'Generate code from ADT discovery data', - + options: [], - + // Contracts is a subcommand of codegen subcommands: [contractsCommand], - + async execute(_args, ctx) { // Run full codegen framework ctx.logger.info('🔄 Running codegen framework...\n'); - + const { CodegenFramework } = await import('../framework'); - + // Config is loaded by CLI and passed via context const codegenConfig = ctx.config.codegen; - + if (!codegenConfig) { ctx.logger.error('❌ No codegen config found in adt.config.ts'); - ctx.logger.error(' Add a "codegen" section with framework configuration'); + ctx.logger.error( + ' Add a "codegen" section with framework configuration', + ); process.exit(1); } - + // eslint-disable-next-line @typescript-eslint/no-explicit-any const framework = new CodegenFramework(codegenConfig as any); await framework.run(); - + ctx.logger.info('\n✅ Codegen complete!'); }, }; diff --git a/packages/adt-codegen/src/commands/contracts.ts b/packages/adt-codegen/src/commands/contracts.ts index 7450dc8b..1ae6ac0c 100644 --- a/packages/adt-codegen/src/commands/contracts.ts +++ b/packages/adt-codegen/src/commands/contracts.ts @@ -1,13 +1,13 @@ /** * Contracts Command Plugin - * + * * CLI-agnostic command for generating type-safe contracts from SAP ADT discovery. - * + * * Features: * - Auto-fetches discovery from SAP if not cached * - Caches discovery XML locally for offline use * - Generates contracts directly from discovery (no pre-processing needed) - * + * * NOTE: This plugin expects config to be loaded by the CLI and passed via ctx.config. * It does NOT load config itself - that's the CLI's responsibility. */ @@ -25,11 +25,12 @@ import { generateContractsFromDiscovery } from '../plugins/generate-contracts'; export const contractsCommand: CliCommandPlugin = { name: 'contracts', description: 'Generate type-safe contracts from SAP ADT discovery', - + options: [ { flags: '--discovery ', - description: 'Path to discovery XML file (fetched from SAP if not exists)', + description: + 'Path to discovery XML file (fetched from SAP if not exists)', }, { flags: '--output ', @@ -44,33 +45,35 @@ export const contractsCommand: CliCommandPlugin = { description: 'Force fetch discovery from SAP (even if cached)', }, ], - + async execute(args, ctx) { ctx.logger.info('🔄 Generating contracts...\n'); - + // Config is loaded by CLI and passed via context const contractsConfig = ctx.config.contracts as ContractsConfig | undefined; - + if (!contractsConfig) { ctx.logger.error('❌ No contracts config found in adt.config.ts'); - ctx.logger.error(' Add a "contracts" section with discovery, contentTypeMapping, and enabledEndpoints'); + ctx.logger.error( + ' Add a "contracts" section with discovery, contentTypeMapping, and enabledEndpoints', + ); process.exit(1); } - + // Discovery path from CLI or config const discoveryPath = args.discovery ? resolve(ctx.cwd, args.discovery as string) : contractsConfig.discovery ? resolve(ctx.cwd, contractsConfig.discovery) : resolve(ctx.cwd, 'tmp/discovery/discovery.xml'); - + // Check if we need to fetch discovery const forceFetch = args.fetch === true; const needsFetch = forceFetch || !existsSync(discoveryPath); - + if (needsFetch) { ctx.logger.info('📡 Fetching discovery from SAP...'); - + try { // Use adt CLI to fetch discovery - no internal API dependencies mkdirSync(dirname(discoveryPath), { recursive: true }); @@ -81,50 +84,63 @@ export const contractsCommand: CliCommandPlugin = { ctx.logger.info(`💾 Discovery cached to: ${discoveryPath}`); } catch (error) { ctx.logger.error('❌ Failed to fetch discovery from SAP'); - ctx.logger.error(' Make sure you are authenticated: npx adt auth login'); - ctx.logger.error(' Error: ' + (error instanceof Error ? error.message : String(error))); + ctx.logger.error( + ' Make sure you are authenticated: npx adt auth login', + ); + ctx.logger.error( + ' Error: ' + + (error instanceof Error ? error.message : String(error)), + ); process.exit(1); } } else { ctx.logger.info(`📂 Using cached discovery: ${discoveryPath}`); } - + // Output paths from config or CLI override const outputDir = args.output ? resolve(ctx.cwd, args.output as string) - : contractsConfig.output + : contractsConfig.output ? resolve(ctx.cwd, contractsConfig.output) : null; - + if (!outputDir) { - ctx.logger.error('❌ Output directory not configured. Set contracts.output in adt.config.ts or use --output'); + ctx.logger.error( + '❌ Output directory not configured. Set contracts.output in adt.config.ts or use --output', + ); process.exit(1); } - + const docsDir = args.docs ? resolve(ctx.cwd, args.docs as string) : contractsConfig.docs ? resolve(ctx.cwd, contractsConfig.docs) : null; - + if (!docsDir) { - ctx.logger.error('❌ Docs directory not configured. Set contracts.docs in adt.config.ts or use --docs'); + ctx.logger.error( + '❌ Docs directory not configured. Set contracts.docs in adt.config.ts or use --docs', + ); process.exit(1); } - + // Mapping config from adt.config.ts const contentTypeMapping = contractsConfig.contentTypeMapping; if (!contentTypeMapping) { - ctx.logger.error('❌ Content type mapping not configured. Set contracts.contentTypeMapping in adt.config.ts'); + ctx.logger.error( + '❌ Content type mapping not configured. Set contracts.contentTypeMapping in adt.config.ts', + ); process.exit(1); } - + const enabledEndpoints = contractsConfig.enabledEndpoints; if (!enabledEndpoints) { - ctx.logger.error('❌ Enabled endpoints not configured. Set contracts.enabledEndpoints in adt.config.ts'); + ctx.logger.error( + '❌ Enabled endpoints not configured. Set contracts.enabledEndpoints in adt.config.ts', + ); process.exit(1); } - + await generateContractsFromDiscovery({ discoveryXml: discoveryPath, outputDir, @@ -134,7 +150,7 @@ export const contractsCommand: CliCommandPlugin = { resolveImports: contractsConfig.resolveImports, clean: contractsConfig.clean, }); - + ctx.logger.info('\n✅ Contract generation complete!'); }, }; diff --git a/packages/adt-codegen/src/framework.ts b/packages/adt-codegen/src/framework.ts index 3bb89471..c8b2e422 100644 --- a/packages/adt-codegen/src/framework.ts +++ b/packages/adt-codegen/src/framework.ts @@ -171,7 +171,7 @@ export class CodegenFramework { */ private async callHook( hookName: keyof import('./types').PluginHooks, - context: any + context: any, ): Promise { for (const plugin of this.plugins) { const hook = plugin.hooks?.[hookName]; @@ -185,7 +185,7 @@ export class CodegenFramework { * Create workspace context */ private async createWorkspaceContext( - workspace: any + workspace: any, ): Promise { const title = workspace['atom:title']; const folderName = this.sanitizeTitle(title); @@ -231,7 +231,7 @@ export class CodegenFramework { */ private createCollectionContext( collection: any, - workspace: WorkspaceContext + workspace: WorkspaceContext, ): CollectionContext { const accepts = collection['app:accept']; const acceptsArray = accepts @@ -273,7 +273,7 @@ export class CodegenFramework { */ private createTemplateLinkContext( link: TemplateLink, - collection: CollectionContext + collection: CollectionContext, ): TemplateLinkContext { return { rel: link.rel, diff --git a/packages/adt-codegen/src/index.ts b/packages/adt-codegen/src/index.ts index 9e878ee0..6f295644 100644 --- a/packages/adt-codegen/src/index.ts +++ b/packages/adt-codegen/src/index.ts @@ -28,8 +28,8 @@ export type { } from './plugins/index'; // Contract generator -export { - generateContracts, +export { + generateContracts, defaultResolveImports, type GenerateContractsOptions, type ContractImports, diff --git a/packages/adt-codegen/src/plugins/discovery-parser.ts b/packages/adt-codegen/src/plugins/discovery-parser.ts index 7c9377e4..8a48bddd 100644 --- a/packages/adt-codegen/src/plugins/discovery-parser.ts +++ b/packages/adt-codegen/src/plugins/discovery-parser.ts @@ -1,6 +1,6 @@ /** * Discovery XML Parser - * + * * Parses SAP ADT discovery XML and extracts collection metadata * for contract generation. */ @@ -33,65 +33,82 @@ export function parseDiscoveryXml(xml: string): DiscoveryData { attributeNamePrefix: '@_', removeNSPrefix: false, }); - + const parsed = parser.parse(xml); const service = parsed['app:service']; - + if (!service) { throw new Error('Invalid discovery XML: missing app:service element'); } - + const workspacesRaw = service['app:workspace']; - const workspacesArray = Array.isArray(workspacesRaw) ? workspacesRaw : [workspacesRaw]; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const workspaces: WorkspaceData[] = workspacesArray.map((ws: Record) => { - const collectionsRaw = ws['app:collection']; - const collectionsArray = collectionsRaw - ? (Array.isArray(collectionsRaw) ? collectionsRaw : [collectionsRaw]) - : []; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const collections: CollectionData[] = collectionsArray.map((coll: Record) => { - // Parse accepts - const acceptsRaw = coll['app:accept']; - const accepts = acceptsRaw - ? (Array.isArray(acceptsRaw) ? acceptsRaw : [acceptsRaw]) - : []; - - // Parse category - const categoryRaw = coll['atom:category']; - const category = categoryRaw - ? { term: categoryRaw['@_term'] || '', scheme: categoryRaw['@_scheme'] || '' } - : { term: '', scheme: '' }; - - // Parse template links - const templateLinksContainer = coll['adtcomp:templateLinks']; - const templateLinksRaw = templateLinksContainer?.['adtcomp:templateLink']; - const templateLinks = templateLinksRaw - ? (Array.isArray(templateLinksRaw) ? templateLinksRaw : [templateLinksRaw]) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - .map((tl: Record) => ({ - rel: tl['@_rel'] || '', - template: tl['@_template'] || '', - })) + const workspacesArray = Array.isArray(workspacesRaw) + ? workspacesRaw + : [workspacesRaw]; + + + const workspaces: WorkspaceData[] = workspacesArray.map( + (ws: Record) => { + const collectionsRaw = ws['app:collection']; + const collectionsArray = collectionsRaw + ? Array.isArray(collectionsRaw) + ? collectionsRaw + : [collectionsRaw] : []; - + + + const collections: CollectionData[] = collectionsArray.map( + (coll: Record) => { + // Parse accepts + const acceptsRaw = coll['app:accept']; + const accepts = acceptsRaw + ? Array.isArray(acceptsRaw) + ? acceptsRaw + : [acceptsRaw] + : []; + + // Parse category + const categoryRaw = coll['atom:category']; + const category = categoryRaw + ? { + term: categoryRaw['@_term'] || '', + scheme: categoryRaw['@_scheme'] || '', + } + : { term: '', scheme: '' }; + + // Parse template links + const templateLinksContainer = coll['adtcomp:templateLinks']; + const templateLinksRaw = + templateLinksContainer?.['adtcomp:templateLink']; + const templateLinks = templateLinksRaw + ? (Array.isArray(templateLinksRaw) + ? templateLinksRaw + : [templateLinksRaw] + ) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + .map((tl: Record) => ({ + rel: tl['@_rel'] || '', + template: tl['@_template'] || '', + })) + : []; + + return { + href: cleanUrl(coll['@_href'] || ''), + title: coll['atom:title'] || '', + accepts, + category, + templateLinks, + }; + }, + ); + return { - href: cleanUrl(coll['@_href'] || ''), - title: coll['atom:title'] || '', - accepts, - category, - templateLinks, + title: ws['atom:title'] || '', + collections, }; - }); - - return { - title: ws['atom:title'] || '', - collections, - }; - }); - + }, + ); + return { workspaces }; } @@ -107,5 +124,5 @@ function cleanUrl(url: string): string { * Flatten all collections from all workspaces */ export function getAllCollections(discovery: DiscoveryData): CollectionData[] { - return discovery.workspaces.flatMap(ws => ws.collections); + return discovery.workspaces.flatMap((ws) => ws.collections); } diff --git a/packages/adt-codegen/src/plugins/endpoint-config.ts b/packages/adt-codegen/src/plugins/endpoint-config.ts index 02a0392a..21b0c8f0 100644 --- a/packages/adt-codegen/src/plugins/endpoint-config.ts +++ b/packages/adt-codegen/src/plugins/endpoint-config.ts @@ -1,20 +1,20 @@ /** * Endpoint Configuration API - * + * * Type-safe configuration for contract generation. * Supports simple patterns (string/regex) and advanced config objects. - * + * * @example * ```typescript * import { defineEndpoints, defineEndpoint } from '@abapify/adt-codegen'; - * + * * export const endpoints = defineEndpoints([ * // Simple: string glob pattern * '/sap/bc/adt/cts/transportrequests/**', - * + * * // Simple: regex * /\/sap\/bc\/adt\/oo\/(classes|interfaces)/, - * + * * // Advanced: specific methods only * defineEndpoint({ * path: '/sap/bc/adt/atc/runs', @@ -41,38 +41,38 @@ export interface EndpointConfig { * @example /\/sap\/bc\/adt\/oo\/(classes|interfaces)/ */ path: EndpointPattern; - + /** * HTTP methods to generate. If not specified, all methods from discovery are used. * @example ['GET', 'POST'] */ methods?: HttpMethod[]; - + /** * Override the schema for this endpoint * @example 'atcworklist' */ schema?: string; - + /** * Override the Accept header for this endpoint. * SAP discovery sometimes reports wrong content types. * Use this to specify the actual Accept header value. */ accept?: string; - + /** * Custom description for the generated contract */ description?: string; - + /** * Generate a full CRUD contract using the crud() helper. * When true, generates get/post/put/delete methods following the ADT URL template: * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action} - * + * * Requires `schema` and `accept` to be specified. - * + * * @example * ```typescript * defineEndpoint({ @@ -105,7 +105,7 @@ export interface NormalizedEndpointConfig { /** * Define a single endpoint with advanced configuration - * + * * @example * ```typescript * defineEndpoint({ @@ -121,7 +121,7 @@ export function defineEndpoint(config: EndpointConfig): EndpointConfig { /** * Define multiple endpoints with type safety - * + * * @example * ```typescript * defineEndpoints([ @@ -130,21 +130,32 @@ export function defineEndpoint(config: EndpointConfig): EndpointConfig { * ]) * ``` */ -export function defineEndpoints(endpoints: EndpointDefinition[]): EndpointDefinition[] { +export function defineEndpoints( + endpoints: EndpointDefinition[], +): EndpointDefinition[] { return endpoints; } /** * Check if a definition is an advanced config object */ -export function isEndpointConfig(def: EndpointDefinition): def is EndpointConfig { - return typeof def === 'object' && def !== null && !(def instanceof RegExp) && 'path' in def; +export function isEndpointConfig( + def: EndpointDefinition, +): def is EndpointConfig { + return ( + typeof def === 'object' && + def !== null && + !(def instanceof RegExp) && + 'path' in def + ); } /** * Normalize an endpoint definition to internal format */ -export function normalizeEndpoint(def: EndpointDefinition): NormalizedEndpointConfig { +export function normalizeEndpoint( + def: EndpointDefinition, +): NormalizedEndpointConfig { if (isEndpointConfig(def)) { return { pattern: def.path, @@ -161,23 +172,26 @@ export function normalizeEndpoint(def: EndpointDefinition): NormalizedEndpointCo /** * Check if a path matches an endpoint pattern */ -export function matchesPattern(path: string, pattern: EndpointPattern): boolean { +export function matchesPattern( + path: string, + pattern: EndpointPattern, +): boolean { if (pattern instanceof RegExp) { return pattern.test(path); } - + // Glob pattern matching if (pattern.endsWith('/**')) { const prefix = pattern.slice(0, -3); return path.startsWith(prefix); } - + if (pattern.endsWith('/*')) { const prefix = pattern.slice(0, -2); const remaining = path.slice(prefix.length); return path.startsWith(prefix) && !remaining.slice(1).includes('/'); } - + // Exact match or prefix match return path === pattern || path.startsWith(pattern + '/'); } @@ -187,8 +201,8 @@ export function matchesPattern(path: string, pattern: EndpointPattern): boolean * Returns the first matching config, or undefined if no match */ export function findMatchingEndpoint( - path: string, - endpoints: EndpointDefinition[] + path: string, + endpoints: EndpointDefinition[], ): NormalizedEndpointConfig | undefined { for (const def of endpoints) { const normalized = normalizeEndpoint(def); @@ -202,7 +216,10 @@ export function findMatchingEndpoint( /** * Check if a path is enabled by any endpoint definition */ -export function isPathEnabled(path: string, endpoints: EndpointDefinition[]): boolean { +export function isPathEnabled( + path: string, + endpoints: EndpointDefinition[], +): boolean { return findMatchingEndpoint(path, endpoints) !== undefined; } @@ -210,15 +227,15 @@ export function isPathEnabled(path: string, endpoints: EndpointDefinition[]): bo * Check if a specific method is enabled for a path */ export function isMethodEnabled( - path: string, - method: HttpMethod, - endpoints: EndpointDefinition[] + path: string, + method: HttpMethod, + endpoints: EndpointDefinition[], ): boolean { const config = findMatchingEndpoint(path, endpoints); if (!config) return false; - + // If no methods specified, all methods are enabled if (!config.methods) return true; - + return config.methods.includes(method); } diff --git a/packages/adt-codegen/src/plugins/extract-collections.ts b/packages/adt-codegen/src/plugins/extract-collections.ts index a031deec..bfd55875 100644 --- a/packages/adt-codegen/src/plugins/extract-collections.ts +++ b/packages/adt-codegen/src/plugins/extract-collections.ts @@ -21,7 +21,7 @@ function cleanUrl(url: string): string { */ function sanitizePath(path: string): string { // First clean the URL - let cleanPath = cleanUrl(path); + const cleanPath = cleanUrl(path); return cleanPath .replace(/^\/+/, '') // Remove leading slashes diff --git a/packages/adt-codegen/src/plugins/generate-contracts.ts b/packages/adt-codegen/src/plugins/generate-contracts.ts index 05a674fe..c7e2bdc6 100644 --- a/packages/adt-codegen/src/plugins/generate-contracts.ts +++ b/packages/adt-codegen/src/plugins/generate-contracts.ts @@ -1,8 +1,8 @@ /** * Contract Generator Plugin for adt-codegen - * + * * Generates type-safe speci contracts from ADT discovery data. - * + * * Features: * - Whitelist-based generation (only enabled endpoints) * - Content-type to schema mapping @@ -69,7 +69,7 @@ export interface ContractImports { * @example '#base' (tsconfig path alias) */ base: string; - + /** * Module path for schema imports * @example '#schemas' (tsconfig path alias) @@ -83,29 +83,32 @@ export interface ContractImports { * @param outputDir - The output directory for generated contracts * @returns Import paths for base and schemas */ -export type ResolveImportsHook = (relativePath: string, outputDir: string) => ContractImports; +export type ResolveImportsHook = ( + relativePath: string, + outputDir: string, +) => ContractImports; export interface GenerateContractsOptions { collectionsDir: string; outputDir: string; docsDir: string; - + /** * Content-type mapping - either file path (string) or config object */ contentTypeMapping: string | ContentTypeMapping; - + /** * Enabled endpoints - either file path (string) or config object */ enabledEndpoints: string | EnabledEndpoints; - + /** * Hook to resolve import paths for generated contracts. * If not provided, uses relative path calculation (default behavior). */ resolveImports?: ResolveImportsHook; - + /** * Clean output directory before generating. * When true, removes all files in outputDir before generating new contracts. @@ -116,11 +119,14 @@ export interface GenerateContractsOptions { /** * Default import resolver - uses tsconfig path aliases - * + * * Uses #base and #schemas aliases which are configured in tsconfig.json paths. * tsdown 0.18+ resolves these in both JS and .d.ts output. */ -export function defaultResolveImports(_relativePath: string, _outputDir: string): ContractImports { +export function defaultResolveImports( + _relativePath: string, + _outputDir: string, +): ContractImports { return { base: '#base', schemas: '#schemas', @@ -142,12 +148,16 @@ async function loadEnabledEndpoints(path: string): Promise { } /** Check if endpoints config is legacy format */ -function isLegacyFormat(endpoints: EnabledEndpoints): endpoints is LegacyEnabledEndpoints { +function isLegacyFormat( + endpoints: EnabledEndpoints, +): endpoints is LegacyEnabledEndpoints { return !Array.isArray(endpoints) && 'enabled' in endpoints; } /** Convert legacy or new format to EndpointDefinition[] */ -function normalizeEnabledEndpoints(endpoints: EnabledEndpoints): EndpointDefinition[] { +function normalizeEnabledEndpoints( + endpoints: EnabledEndpoints, +): EndpointDefinition[] { if (isLegacyFormat(endpoints)) { // Convert legacy { enabled: string[] } to EndpointDefinition[] return endpoints.enabled; @@ -172,7 +182,9 @@ function getSchemaFromContentType(contentType: string): string | undefined { } function getSchemaFromPath(href: string): string | undefined { - for (const [pathPattern, schema] of Object.entries(contentTypeMapping.fallbacks)) { + for (const [pathPattern, schema] of Object.entries( + contentTypeMapping.fallbacks, + )) { if (href.includes(pathPattern)) { return schema; } @@ -188,22 +200,26 @@ function inferSchema(href: string, accepts: string[]): string | undefined { return getSchemaFromPath(href); } -function parseTemplate(template: string): { path: string; pathParams: string[]; queryParams: string[] } { +function parseTemplate(template: string): { + path: string; + pathParams: string[]; + queryParams: string[]; +} { const pathParams: string[] = []; const queryParams: string[] = []; - + const queryMatch = template.match(/\{\?([^}]+)\}/); if (queryMatch) { queryParams.push(...queryMatch[1].split(',').map(sanitizeParamName)); } - + const path = template.replace(/\{\?[^}]+\}/, ''); - + const pathMatches = path.matchAll(/\{([^}]+)\}/g); for (const match of pathMatches) { pathParams.push(sanitizeParamName(match[1])); } - + return { path, pathParams, queryParams }; } @@ -222,25 +238,33 @@ function sanitizeParamName(name: string): string { function inferMethod(rel: string): 'GET' | 'POST' | 'PUT' | 'DELETE' { const r = rel.toLowerCase(); - if (r.includes('/new') || r.includes('/create') || r.includes('/run')) return 'POST'; + if (r.includes('/new') || r.includes('/create') || r.includes('/run')) + return 'POST'; if (r.includes('/update') || r.includes('/apply')) return 'PUT'; if (r.includes('/delete')) return 'DELETE'; return 'GET'; } -function methodNameFromRel(rel: string, httpMethod: string, existingNames: Set): string { +function methodNameFromRel( + rel: string, + httpMethod: string, + existingNames: Set, +): string { const parts = rel.split('/').filter(Boolean); let name = parts[parts.length - 1] ?? httpMethod.toLowerCase(); - + name = name .replace(/^relations?$/, '') .replace(/[^a-zA-Z0-9]/g, '') .toLowerCase(); - - if (!name || ['get', 'post', 'put', 'delete', 'new', 'create'].includes(name)) { + + if ( + !name || + ['get', 'post', 'put', 'delete', 'new', 'create'].includes(name) + ) { name = httpMethod.toLowerCase(); } - + let finalName = name; let counter = 2; while (existingNames.has(finalName)) { @@ -248,7 +272,7 @@ function methodNameFromRel(rel: string, httpMethod: string, existingNames: Set(); - + if (coll.templateLinks.length === 0) { // Only add GET if method filtering allows it if (isMethodEnabledForEndpoint(coll.href, 'GET')) { @@ -278,14 +302,14 @@ function processCollection(coll: CollectionJson): EndpointMethod[] { for (const link of coll.templateLinks) { const { path, pathParams, queryParams } = parseTemplate(link.template); const httpMethod = inferMethod(link.rel); - + // Skip if method is not enabled for this endpoint if (!isMethodEnabledForEndpoint(coll.href, httpMethod)) { continue; } - + const methodName = methodNameFromRel(link.rel, httpMethod, methodNames); - + const method: EndpointMethod = { name: methodName, httpMethod, @@ -296,41 +320,58 @@ function processCollection(coll: CollectionJson): EndpointMethod[] { responseSchema: schema, description: httpMethod + ' ' + coll.title, }; - + if (httpMethod === 'POST' || httpMethod === 'PUT') { method.contentType = accept; method.requestSchema = schema; } - + methods.push(method); } } - + return methods; } function generateMethodCode(method: EndpointMethod, indent: string): string { - const { name, httpMethod, path, pathParams, queryParams, accept, contentType, requestSchema, responseSchema, description } = method; - + const { + name, + httpMethod, + path, + pathParams, + queryParams, + accept, + contentType, + requestSchema, + responseSchema, + description, + } = method; + const params: string[] = []; for (const param of pathParams) { params.push(param + ': string'); } if (queryParams.length > 0) { - const queryType = queryParams.map(p => p + '?: string').join('; '); + const queryType = queryParams.map((p) => p + '?: string').join('; '); params.push('params?: { ' + queryType + ' }'); } - + const paramsStr = params.join(', '); - + let pathExpr: string; if (pathParams.length > 0) { // Sanitize parameter names in the path expression - pathExpr = '`' + path.replace(/\{([^}]+)\}/g, (_, p) => '${' + sanitizeParamName(p) + '}') + '`'; + pathExpr = + '`' + + path.replace( + /\{([^}]+)\}/g, + (_, p) => '${' + sanitizeParamName(p) + '}', + ) + + '`'; } else { pathExpr = "'" + path + "'"; } - + const options: string[] = []; if (queryParams.length > 0) { options.push('query: params'); @@ -339,22 +380,42 @@ function generateMethodCode(method: EndpointMethod, indent: string): string { options.push('body: ' + requestSchema); } options.push('responses: { 200: ' + (responseSchema || 'undefined') + ' }'); - + const headers: string[] = ["Accept: '" + accept + "'"]; if (contentType) { headers.push("'Content-Type': '" + contentType + "'"); } options.push('headers: { ' + headers.join(', ') + ' }'); - + const httpMethodLower = httpMethod.toLowerCase(); - - return indent + '/**\n' + - indent + ' * ' + description + '\n' + - indent + ' */\n' + - indent + name + ': (' + paramsStr + ') =>\n' + - indent + ' http.' + httpMethodLower + '(' + pathExpr + ', {\n' + - indent + ' ' + options.join(',\n' + indent + ' ') + ',\n' + - indent + ' }),\n'; + + return ( + indent + + '/**\n' + + indent + + ' * ' + + description + + '\n' + + indent + + ' */\n' + + indent + + name + + ': (' + + paramsStr + + ') =>\n' + + indent + + ' http.' + + httpMethodLower + + '(' + + pathExpr + + ', {\n' + + indent + + ' ' + + options.join(',\n' + indent + ' ') + + ',\n' + + indent + + ' }),\n' + ); } /** @@ -364,68 +425,112 @@ function generateCrudContractFile( coll: CollectionJson, relativePath: string, imports: ContractImports, - config: NormalizedEndpointConfig + config: NormalizedEndpointConfig, ): string { const contractName = relativePath.split('/').pop() || 'contract'; const schema = config.schema; const accept = config.accept; - + if (!schema || !accept) { - throw new Error(`CRUD contract requires schema and accept for ${coll.href}`); + throw new Error( + `CRUD contract requires schema and accept for ${coll.href}`, + ); } - - let code = '/**\n' + - ' * ' + coll.title + '\n' + + + const code = + '/**\n' + + ' * ' + + coll.title + + '\n' + ' * \n' + - ' * Endpoint: ' + coll.href + '\n' + - ' * Category: ' + coll.category.term + '\n' + + ' * Endpoint: ' + + coll.href + + '\n' + + ' * Category: ' + + coll.category.term + + '\n' + ' * \n' + ' * Full CRUD operations following ADT URL template:\n' + ' * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action}\n' + ' * \n' + ' * @generated - DO NOT EDIT MANUALLY\n' + ' */\n\n' + - "import { crud } from '" + imports.base + "';\n" + - "import { " + schema + " } from '" + imports.schemas + "';\n\n" + - 'export const ' + contractName + 'Contract = crud({\n' + - " basePath: '" + coll.href + "',\n" + - ' schema: ' + schema + ',\n' + - " contentType: '" + accept + "',\n" + + "import { crud } from '" + + imports.base + + "';\n" + + 'import { ' + + schema + + " } from '" + + imports.schemas + + "';\n\n" + + 'export const ' + + contractName + + 'Contract = crud({\n' + + " basePath: '" + + coll.href + + "',\n" + + ' schema: ' + + schema + + ',\n' + + " contentType: '" + + accept + + "',\n" + '});\n\n' + - 'export type ' + contractName.charAt(0).toUpperCase() + contractName.slice(1) + 'Contract = typeof ' + contractName + 'Contract;\n'; + 'export type ' + + contractName.charAt(0).toUpperCase() + + contractName.slice(1) + + 'Contract = typeof ' + + contractName + + 'Contract;\n'; return code; } function generateContractFile( - coll: CollectionJson, - methods: EndpointMethod[], + coll: CollectionJson, + methods: EndpointMethod[], relativePath: string, - imports: ContractImports + imports: ContractImports, ): string { const schemas = new Set(); for (const method of methods) { if (method.responseSchema) schemas.add(method.responseSchema); if (method.requestSchema) schemas.add(method.requestSchema); } - + const availableSchemas = new Set(Object.values(contentTypeMapping.mapping)); - const schemaImports = Array.from(schemas).filter(s => availableSchemas.has(s)).sort(); - + const schemaImports = Array.from(schemas) + .filter((s) => availableSchemas.has(s)) + .sort(); + const contractName = relativePath.split('/').pop() || 'contract'; - - let code = '/**\n' + - ' * ' + coll.title + '\n' + + + let code = + '/**\n' + + ' * ' + + coll.title + + '\n' + ' * \n' + - ' * Endpoint: ' + coll.href + '\n' + - ' * Category: ' + coll.category.term + '\n' + + ' * Endpoint: ' + + coll.href + + '\n' + + ' * Category: ' + + coll.category.term + + '\n' + ' * \n' + ' * @generated - DO NOT EDIT MANUALLY\n' + ' */\n\n' + - "import { http, contract } from '" + imports.base + "';\n"; + "import { http, contract } from '" + + imports.base + + "';\n"; if (schemaImports.length > 0) { - code += "import { " + schemaImports.join(', ') + " } from '" + imports.schemas + "';\n"; + code += + 'import { ' + + schemaImports.join(', ') + + " } from '" + + imports.schemas + + "';\n"; } code += '\nexport const ' + contractName + 'Contract = contract({\n'; @@ -434,14 +539,23 @@ function generateContractFile( code += generateMethodCode(method, ' '); } - code += '});\n\n' + - 'export type ' + contractName.charAt(0).toUpperCase() + contractName.slice(1) + 'Contract = typeof ' + contractName + 'Contract;\n'; + code += + '});\n\n' + + 'export type ' + + contractName.charAt(0).toUpperCase() + + contractName.slice(1) + + 'Contract = typeof ' + + contractName + + 'Contract;\n'; return code; } -function generateIndexFile(contracts: Array<{ relativePath: string; contractName: string }>): string { - let code = '/**\n' + +function generateIndexFile( + contracts: Array<{ relativePath: string; contractName: string }>, +): string { + let code = + '/**\n' + ' * Generated ADT Contracts Index\n' + ' * \n' + ' * Only includes enabled endpoints from config/enabled-endpoints.json\n' + @@ -452,31 +566,41 @@ function generateIndexFile(contracts: Array<{ relativePath: string; contractName // Track used export names to avoid duplicates const usedNames = new Set(); - + // Generate unique export name from path - function getUniqueExportName(relativePath: string, contractName: string): string { + function getUniqueExportName( + relativePath: string, + contractName: string, + ): string { // Start with just the contract name let exportName = contractName + 'Contract'; - + if (!usedNames.has(exportName)) { usedNames.add(exportName); return exportName; } - + // If duplicate, prefix with parent directory names until unique const parts = relativePath.split('/'); for (let i = parts.length - 2; i >= 0; i--) { - const prefix = parts.slice(i, -1).map(p => - p.replace(/[^a-zA-Z0-9]/g, '').replace(/^./, c => c.toUpperCase()) - ).join(''); - exportName = prefix + contractName.charAt(0).toUpperCase() + contractName.slice(1) + 'Contract'; - + const prefix = parts + .slice(i, -1) + .map((p) => + p.replace(/[^a-zA-Z0-9]/g, '').replace(/^./, (c) => c.toUpperCase()), + ) + .join(''); + exportName = + prefix + + contractName.charAt(0).toUpperCase() + + contractName.slice(1) + + 'Contract'; + if (!usedNames.has(exportName)) { usedNames.add(exportName); return exportName; } } - + // Fallback: add numeric suffix let counter = 2; const baseName = contractName + 'Contract'; @@ -488,8 +612,11 @@ function generateIndexFile(contracts: Array<{ relativePath: string; contractName return exportName; } - const byDir = new Map>(); - + const byDir = new Map< + string, + Array<{ relativePath: string; contractName: string; exportName: string }> + >(); + for (const c of contracts) { const dir = dirname(c.relativePath); if (!byDir.has(dir)) { @@ -501,14 +628,28 @@ function generateIndexFile(contracts: Array<{ relativePath: string; contractName dirContracts.push({ ...c, exportName }); } } - + for (const [dir, items] of Array.from(byDir.entries()).sort()) { code += '// ' + dir + '\n'; - for (const item of items.sort((a, b) => a.contractName.localeCompare(b.contractName))) { + for (const item of items.sort((a, b) => + a.contractName.localeCompare(b.contractName), + )) { if (item.exportName === item.contractName + 'Contract') { - code += "export { " + item.contractName + "Contract } from './" + item.relativePath + "';\n"; + code += + 'export { ' + + item.contractName + + "Contract } from './" + + item.relativePath + + "';\n"; } else { - code += "export { " + item.contractName + "Contract as " + item.exportName + " } from './" + item.relativePath + "';\n"; + code += + 'export { ' + + item.contractName + + 'Contract as ' + + item.exportName + + " } from './" + + item.relativePath + + "';\n"; } } code += '\n'; @@ -519,25 +660,34 @@ function generateIndexFile(contracts: Array<{ relativePath: string; contractName function generateUnsupportedEndpointsDoc( unsupported: Array<{ href: string; title: string; category: string }>, - enabled: Array<{ href: string; title: string; category: string }> + enabled: Array<{ href: string; title: string; category: string }>, ): string { let doc = '# ADT Endpoints Reference\n\n'; doc += '> Auto-generated from SAP ADT discovery data.\n'; - doc += '> To enable an endpoint, add it to `adt-codegen` config/enabled-endpoints.json\n\n'; - + doc += + '> To enable an endpoint, add it to `adt-codegen` config/enabled-endpoints.json\n\n'; + doc += '## Enabled Endpoints (' + enabled.length + ')\n\n'; - doc += 'These endpoints have generated contracts in `src/generated/adt/`:\n\n'; + doc += + 'These endpoints have generated contracts in `src/generated/adt/`:\n\n'; doc += '| Endpoint | Title | Category |\n'; doc += '|----------|-------|----------|\n'; for (const e of enabled.sort((a, b) => a.href.localeCompare(b.href))) { doc += '| `' + e.href + '` | ' + e.title + ' | ' + e.category + ' |\n'; } - - doc += '\n## Available Endpoints (Not Yet Enabled) (' + unsupported.length + ')\n\n'; - doc += 'These endpoints were discovered but no contracts are generated yet:\n\n'; - + + doc += + '\n## Available Endpoints (Not Yet Enabled) (' + + unsupported.length + + ')\n\n'; + doc += + 'These endpoints were discovered but no contracts are generated yet:\n\n'; + // Group by top-level path - const byArea = new Map>(); + const byArea = new Map< + string, + Array<{ href: string; title: string; category: string }> + >(); for (const e of unsupported) { const parts = e.href.split('/'); const area = parts.slice(0, 5).join('/'); // /sap/bc/adt/xxx @@ -549,7 +699,7 @@ function generateUnsupportedEndpointsDoc( areaEndpoints.push(e); } } - + for (const [area, endpoints] of Array.from(byArea.entries()).sort()) { doc += '### ' + area + ' (' + endpoints.length + ' endpoints)\n\n'; doc += '
\nClick to expand\n\n'; @@ -560,13 +710,13 @@ function generateUnsupportedEndpointsDoc( } doc += '\n
\n\n'; } - + return doc; } async function findJsonFiles(dir: string): Promise { const files: string[] = []; - + async function walk(currentDir: string) { const entries = await readdir(currentDir, { withFileTypes: true }); for (const entry of entries) { @@ -578,7 +728,7 @@ async function findJsonFiles(dir: string): Promise { } } } - + await walk(dir); return files; } @@ -586,22 +736,24 @@ async function findJsonFiles(dir: string): Promise { /** * Generate contracts from discovery collections */ -export async function generateContracts(options: GenerateContractsOptions): Promise { +export async function generateContracts( + options: GenerateContractsOptions, +): Promise { const { collectionsDir, outputDir, docsDir, resolveImports, clean } = options; - + // Use provided hook or default resolver const importResolver = resolveImports ?? defaultResolveImports; - + console.log('Collections: ' + collectionsDir); console.log('Output: ' + outputDir); console.log('Docs: ' + docsDir); - + // Clean output directory if requested if (clean && existsSync(outputDir)) { await rm(outputDir, { recursive: true }); console.log('Cleaned: ' + outputDir); } - + // Load content type mapping - either from file or use object directly if (typeof options.contentTypeMapping === 'string') { if (!existsSync(options.contentTypeMapping)) { @@ -611,55 +763,72 @@ export async function generateContracts(options: GenerateContractsOptions): Prom } else { contentTypeMapping = options.contentTypeMapping; } - + // Load enabled endpoints - either from file or use object directly if (typeof options.enabledEndpoints === 'string') { if (!existsSync(options.enabledEndpoints)) { - throw new Error('Enabled endpoints file not found: ' + options.enabledEndpoints); + throw new Error( + 'Enabled endpoints file not found: ' + options.enabledEndpoints, + ); } await loadEnabledEndpoints(options.enabledEndpoints); } else { enabledEndpointsList = normalizeEnabledEndpoints(options.enabledEndpoints); } console.log('Enabled patterns: ' + enabledEndpointsList.length); - + if (!existsSync(collectionsDir)) { throw new Error('Collections directory not found: ' + collectionsDir); } - + const jsonFiles = await findJsonFiles(collectionsDir); console.log('Found ' + jsonFiles.length + ' collection files\n'); - - const generatedContracts: Array<{ relativePath: string; contractName: string }> = []; - const enabledEndpointsInfo: Array<{ href: string; title: string; category: string }> = []; - const skippedEndpointsInfo: Array<{ href: string; title: string; category: string }> = []; + + const generatedContracts: Array<{ + relativePath: string; + contractName: string; + }> = []; + const enabledEndpointsInfo: Array<{ + href: string; + title: string; + category: string; + }> = []; + const skippedEndpointsInfo: Array<{ + href: string; + title: string; + category: string; + }> = []; let totalMethods = 0; - + for (const jsonFile of jsonFiles) { try { const content = await readFile(jsonFile, 'utf-8'); const coll: CollectionJson = JSON.parse(content); - - const endpointInfo = { href: coll.href, title: coll.title, category: coll.category.term }; - + + const endpointInfo = { + href: coll.href, + title: coll.title, + category: coll.category.term, + }; + if (!isEndpointEnabled(coll.href)) { skippedEndpointsInfo.push(endpointInfo); continue; } - + enabledEndpointsInfo.push(endpointInfo); - + const relPath = relative(collectionsDir, jsonFile); const dirPath = dirname(relPath); const contractName = dirPath.split('/').pop() || 'contract'; - + // Get endpoint config to check for CRUD mode const endpointConfig = getEndpointConfig(coll.href); const imports = importResolver(dirPath, outputDir); - + let code: string; let methodCount: number; - + if (endpointConfig?.crud) { // Generate CRUD contract using crud() helper code = generateCrudContractFile(coll, dirPath, imports, endpointConfig); @@ -668,45 +837,59 @@ export async function generateContracts(options: GenerateContractsOptions): Prom } else { // Generate standard contract with individual methods const methods = processCollection(coll); - + // Skip endpoints with no methods (e.g., method filter excluded all) if (methods.length === 0) { - console.log(' - ' + dirPath + '.ts (skipped: no methods after filtering)'); + console.log( + ' - ' + dirPath + '.ts (skipped: no methods after filtering)', + ); continue; } - + code = generateContractFile(coll, methods, dirPath, imports); methodCount = methods.length; console.log(' + ' + dirPath + '.ts (' + methods.length + ' methods)'); } - + totalMethods += methodCount; - + const outputPath = join(outputDir, dirPath + '.ts'); await mkdir(dirname(outputPath), { recursive: true }); await writeFile(outputPath, code, 'utf-8'); - + generatedContracts.push({ relativePath: dirPath, contractName }); - } catch (err) { console.error(' Error: ' + jsonFile + ':', err); } } - + // Generate index const indexCode = generateIndexFile(generatedContracts); await writeFile(join(outputDir, 'index.ts'), indexCode, 'utf-8'); console.log('\n + index.ts'); - + // Generate unsupported endpoints doc - const unsupportedDoc = generateUnsupportedEndpointsDoc(skippedEndpointsInfo, enabledEndpointsInfo); + const unsupportedDoc = generateUnsupportedEndpointsDoc( + skippedEndpointsInfo, + enabledEndpointsInfo, + ); await mkdir(docsDir, { recursive: true }); await writeFile(join(docsDir, 'adt-endpoints.md'), unsupportedDoc, 'utf-8'); console.log(' + ' + docsDir + '/adt-endpoints.md'); - + console.log('\nSummary:'); - console.log(' Enabled: ' + generatedContracts.length + ' contracts, ' + totalMethods + ' methods'); - console.log(' Skipped: ' + skippedEndpointsInfo.length + ' endpoints (not in whitelist)'); + console.log( + ' Enabled: ' + + generatedContracts.length + + ' contracts, ' + + totalMethods + + ' methods', + ); + console.log( + ' Skipped: ' + + skippedEndpointsInfo.length + + ' endpoints (not in whitelist)', + ); } /** @@ -735,25 +918,27 @@ export interface GenerateContractsFromDiscoveryOptions { /** * Generate contracts directly from discovery XML - * + * * This is the preferred method - no pre-processing of collections needed. */ -export async function generateContractsFromDiscovery(options: GenerateContractsFromDiscoveryOptions): Promise { +export async function generateContractsFromDiscovery( + options: GenerateContractsFromDiscoveryOptions, +): Promise { const { discoveryXml, outputDir, docsDir, resolveImports, clean } = options; - + // Use provided hook or default resolver const importResolver = resolveImports ?? defaultResolveImports; - + console.log('Discovery: ' + discoveryXml); console.log('Output: ' + outputDir); console.log('Docs: ' + docsDir); - + // Clean output directory if requested if (clean && existsSync(outputDir)) { await rm(outputDir, { recursive: true }); console.log('Cleaned: ' + outputDir); } - + // Load discovery XML if (!existsSync(discoveryXml)) { throw new Error('Discovery XML not found: ' + discoveryXml); @@ -762,7 +947,7 @@ export async function generateContractsFromDiscovery(options: GenerateContractsF const discovery = parseDiscoveryXml(xml); const collections = getAllCollections(discovery); console.log('Found ' + collections.length + ' collections in discovery\n'); - + // Load content type mapping if (typeof options.contentTypeMapping === 'string') { if (!existsSync(options.contentTypeMapping)) { @@ -772,33 +957,50 @@ export async function generateContractsFromDiscovery(options: GenerateContractsF } else { contentTypeMapping = options.contentTypeMapping; } - + // Load enabled endpoints if (typeof options.enabledEndpoints === 'string') { if (!existsSync(options.enabledEndpoints)) { - throw new Error('Enabled endpoints file not found: ' + options.enabledEndpoints); + throw new Error( + 'Enabled endpoints file not found: ' + options.enabledEndpoints, + ); } await loadEnabledEndpoints(options.enabledEndpoints); } else { enabledEndpointsList = normalizeEnabledEndpoints(options.enabledEndpoints); } console.log('Enabled patterns: ' + enabledEndpointsList.length); - - const generatedContracts: Array<{ relativePath: string; contractName: string }> = []; - const enabledEndpointsInfo: Array<{ href: string; title: string; category: string }> = []; - const skippedEndpointsInfo: Array<{ href: string; title: string; category: string }> = []; + + const generatedContracts: Array<{ + relativePath: string; + contractName: string; + }> = []; + const enabledEndpointsInfo: Array<{ + href: string; + title: string; + category: string; + }> = []; + const skippedEndpointsInfo: Array<{ + href: string; + title: string; + category: string; + }> = []; let totalMethods = 0; - + for (const coll of collections) { - const endpointInfo = { href: coll.href, title: coll.title, category: coll.category.term }; - + const endpointInfo = { + href: coll.href, + title: coll.title, + category: coll.category.term, + }; + if (!isEndpointEnabled(coll.href)) { skippedEndpointsInfo.push(endpointInfo); continue; } - + enabledEndpointsInfo.push(endpointInfo); - + // Convert CollectionData to CollectionJson format const collJson: CollectionJson = { href: coll.href, @@ -807,59 +1009,79 @@ export async function generateContractsFromDiscovery(options: GenerateContractsF category: coll.category, templateLinks: coll.templateLinks, }; - + // Generate relative path from href (e.g., /sap/bc/adt/atc/worklists -> sap/bc/adt/atc/worklists) const dirPath = coll.href.replace(/^\//, ''); const contractName = dirPath.split('/').pop() || 'contract'; - + // Get endpoint config to check for CRUD mode const endpointConfig = getEndpointConfig(coll.href); const imports = importResolver(dirPath, outputDir); - + let code: string; let methodCount: number; - + if (endpointConfig?.crud) { // Generate CRUD contract using crud() helper - code = generateCrudContractFile(collJson, dirPath, imports, endpointConfig); + code = generateCrudContractFile( + collJson, + dirPath, + imports, + endpointConfig, + ); methodCount = 4; // get, post, put, delete console.log(' + ' + dirPath + '.ts (CRUD: get, post, put, delete)'); } else { // Generate standard contract with individual methods const methods = processCollection(collJson); - + // Skip endpoints with no methods (e.g., method filter excluded all) if (methods.length === 0) { - console.log(' - ' + dirPath + '.ts (skipped: no methods after filtering)'); + console.log( + ' - ' + dirPath + '.ts (skipped: no methods after filtering)', + ); continue; } - + code = generateContractFile(collJson, methods, dirPath, imports); methodCount = methods.length; console.log(' + ' + dirPath + '.ts (' + methods.length + ' methods)'); } - + totalMethods += methodCount; - + const outputPath = join(outputDir, dirPath + '.ts'); await mkdir(dirname(outputPath), { recursive: true }); await writeFile(outputPath, code, 'utf-8'); - + generatedContracts.push({ relativePath: dirPath, contractName }); } - + // Generate index const indexCode = generateIndexFile(generatedContracts); await writeFile(join(outputDir, 'index.ts'), indexCode, 'utf-8'); console.log('\n + index.ts'); - + // Generate endpoints doc - const endpointsDoc = generateUnsupportedEndpointsDoc(skippedEndpointsInfo, enabledEndpointsInfo); + const endpointsDoc = generateUnsupportedEndpointsDoc( + skippedEndpointsInfo, + enabledEndpointsInfo, + ); await mkdir(docsDir, { recursive: true }); await writeFile(join(docsDir, 'adt-endpoints.md'), endpointsDoc, 'utf-8'); console.log(' + ' + docsDir + '/adt-endpoints.md'); - + console.log('\nSummary:'); - console.log(' Enabled: ' + generatedContracts.length + ' contracts, ' + totalMethods + ' methods'); - console.log(' Skipped: ' + skippedEndpointsInfo.length + ' endpoints (not in whitelist)'); + console.log( + ' Enabled: ' + + generatedContracts.length + + ' contracts, ' + + totalMethods + + ' methods', + ); + console.log( + ' Skipped: ' + + skippedEndpointsInfo.length + + ' endpoints (not in whitelist)', + ); } diff --git a/packages/adt-codegen/src/plugins/generate-types.ts b/packages/adt-codegen/src/plugins/generate-types.ts index 249c2c64..791e4fcd 100644 --- a/packages/adt-codegen/src/plugins/generate-types.ts +++ b/packages/adt-codegen/src/plugins/generate-types.ts @@ -23,12 +23,12 @@ export const generateTypesPlugin = definePlugin({ * Endpoint: ${coll.href} */ export interface ${typeName} { - // TODO: Add properties based on content-type + // NOTE: Could add properties based on content-type in future // Content-Types: ${coll.accepts.join(', ') || 'none'} } export interface ${typeName}Request { - // TODO: Add request parameters + // NOTE: Could add request parameters in future } export interface ${typeName}Response { @@ -51,7 +51,7 @@ export interface ${typeName}Response { async finalize(ctx) { ctx.logger.success( - `Generated types for ${ctx.workspaces.length} workspaces` + `Generated types for ${ctx.workspaces.length} workspaces`, ); }, }, diff --git a/packages/adt-codegen/tsdown.config.ts b/packages/adt-codegen/tsdown.config.ts index 2c6266e2..f4e2379b 100644 --- a/packages/adt-codegen/tsdown.config.ts +++ b/packages/adt-codegen/tsdown.config.ts @@ -3,6 +3,11 @@ import baseConfig from '../../tsdown.config.ts'; export default defineConfig({ ...baseConfig, - entry: ['src/index.ts', 'src/cli.ts', 'src/plugins/index.ts', 'src/commands/codegen.ts'], + entry: [ + 'src/index.ts', + 'src/cli.ts', + 'src/plugins/index.ts', + 'src/commands/codegen.ts', + ], shims: true, }); diff --git a/packages/adt-config/src/config-loader.ts b/packages/adt-config/src/config-loader.ts index f98e8c7c..db2bdce1 100644 --- a/packages/adt-config/src/config-loader.ts +++ b/packages/adt-config/src/config-loader.ts @@ -1,6 +1,6 @@ /** * Config Loader - * + * * Loads ADT configuration from: * 1. adt.config.ts (TypeScript config - takes precedence) * 2. adt.config.json (JSON config) @@ -18,7 +18,7 @@ import type { AdtConfig, Destination } from './types'; const GLOBAL_CONFIG_PATH = resolve( process.env.HOME || process.env.USERPROFILE || '.', '.adt', - 'config.json' + 'config.json', ); // ============================================================================= @@ -28,13 +28,13 @@ const GLOBAL_CONFIG_PATH = resolve( export interface LoadedConfig { /** Raw config data */ readonly raw: AdtConfig; - + /** Get a destination by name (SID) */ getDestination(name: string): Destination | undefined; - + /** List all destination names */ listDestinations(): string[]; - + /** Check if destination exists */ hasDestination(name: string): boolean; } @@ -103,7 +103,7 @@ function mergeWithGlobal(localConfig: AdtConfig): AdtConfig { function createLoadedConfig(config: AdtConfig): LoadedConfig { return { raw: config, - + getDestination(name: string): Destination | undefined { const dest = config.destinations?.[name]; if (!dest) return undefined; @@ -113,11 +113,11 @@ function createLoadedConfig(config: AdtConfig): LoadedConfig { } return dest; }, - + listDestinations(): string[] { return Object.keys(config.destinations || {}); }, - + hasDestination(name: string): boolean { return name in (config.destinations || {}); }, @@ -129,10 +129,12 @@ function createLoadedConfig(config: AdtConfig): LoadedConfig { * 1. adt.config.ts in cwd * 2. adt.config.json in cwd * 3. ~/.adt/config.json (global) - * + * * @param cwd Current working directory (defaults to process.cwd()) */ -export async function loadConfig(cwd: string = process.cwd()): Promise { +export async function loadConfig( + cwd: string = process.cwd(), +): Promise { // Try TS config first const tsConfigPath = join(cwd, 'adt.config.ts'); const tsConfig = await loadTsConfig(tsConfigPath); @@ -166,11 +168,11 @@ export async function loadConfig(cwd: string = process.cwd()): Promise destination config or URL string) */ destinations?: Record; - + /** CLI command plugins to load dynamically */ commands?: string[]; - + /** Codegen framework configuration */ codegen?: Record; - + /** Contract generation configuration */ contracts?: ContractsConfig; - + /** Allow arbitrary plugin-specific config sections */ [key: string]: unknown; } @@ -52,11 +52,11 @@ export interface ContractsConfig { * Discovery source configuration * - If file exists: use cached discovery data * - If file doesn't exist: fetch from SAP and cache to this path - * + * * @example 'tmp/discovery/discovery.xml' */ discovery?: string; - + /** Content-type to schema mapping */ contentTypeMapping?: ContentTypeMapping | string; /** Enabled endpoints whitelist */ @@ -101,17 +101,14 @@ export interface AuthTestResult { /** * Auth plugin interface - * + * * Plugins implement this to provide authentication methods. * Use `defineAuthPlugin` helper for type safety. */ -export interface AuthPlugin< - TOptions = unknown, - TCredentials = unknown -> { +export interface AuthPlugin { /** Plugin name (e.g., 'puppeteer', 'basic') */ readonly name: string; - + /** Human-readable display name */ readonly displayName?: string; diff --git a/packages/adt-contracts/AGENTS.md b/packages/adt-contracts/AGENTS.md index 54ba92bb..4dc10f11 100644 --- a/packages/adt-contracts/AGENTS.md +++ b/packages/adt-contracts/AGENTS.md @@ -9,6 +9,7 @@ Type-safe SAP ADT REST API contracts using `speci` + `adt-schemas`. ### Purpose Tests contract **definitions** (not HTTP calls): + - **Method** - GET, POST, PUT, DELETE - **Path** - URL pattern with parameters - **Headers** - Accept, Content-Type @@ -58,7 +59,7 @@ import { fixtures } from 'adt-fixtures'; export class MyApiScenario extends ContractScenario { readonly name = 'My API'; - + readonly operations: ContractOperation[] = [ { name: 'get item', @@ -69,7 +70,7 @@ export class MyApiScenario extends ContractScenario { response: { status: 200, schema: mySchema, - fixture: fixtures.myapi.item, // Optional: test parsing + fixture: fixtures.myapi.item, // Optional: test parsing }, }, { @@ -83,7 +84,7 @@ export class MyApiScenario extends ContractScenario { }, body: { schema: mySchema, - fixture: fixtures.myapi.create, // Optional: test round-trip + fixture: fixtures.myapi.create, // Optional: test round-trip }, response: { status: 200, schema: mySchema }, }, @@ -92,6 +93,7 @@ export class MyApiScenario extends ContractScenario { ``` Register in `tests/contracts/index.ts`: + ```typescript import { MyApiScenario } from './myapi'; export const SCENARIOS = [..., new MyApiScenario()]; @@ -99,17 +101,17 @@ export const SCENARIOS = [..., new MyApiScenario()]; ### What Gets Tested -| Test | When | -|------|------| -| `has correct method` | Always | -| `has correct path` | Always | -| `has correct headers` | If `headers` defined | -| `has correct query params` | If `query` defined | -| `has body schema` | If `body` defined | -| `body schema parses fixture` | If `body.fixture` defined | -| `body schema round-trips` | If `body.fixture` + schema has `build` | -| `has response schema for N` | If `response` defined | -| `response schema parses fixture` | If `response.fixture` defined | +| Test | When | +| -------------------------------- | -------------------------------------- | +| `has correct method` | Always | +| `has correct path` | Always | +| `has correct headers` | If `headers` defined | +| `has correct query params` | If `query` defined | +| `has body schema` | If `body` defined | +| `body schema parses fixture` | If `body.fixture` defined | +| `body schema round-trips` | If `body.fixture` + schema has `build` | +| `has response schema for N` | If `response` defined | +| `response schema parses fixture` | If `response.fixture` defined | ### Fixtures @@ -119,21 +121,21 @@ Use `adt-fixtures` for real SAP XML samples: import { fixtures } from 'adt-fixtures'; // Type-safe fixture access -fixtures.transport.single // GET transport response -fixtures.transport.create // POST create request -fixtures.atc.worklist // ATC worklist -fixtures.atc.result // ATC result +fixtures.transport.single; // GET transport response +fixtures.transport.create; // POST create request +fixtures.atc.worklist; // ATC worklist +fixtures.atc.result; // ATC result ``` ## Contract Areas -| Area | Path | Schemas Used | -|------|------|--------------| -| **CTS** | `/sap/bc/adt/cts/` | `transportmanagment*`, `transportfind` | -| **ATC** | `/sap/bc/adt/atc/` | `atcworklist` | -| **Discovery** | `/sap/bc/adt/discovery` | `discovery` | -| **OO** | `/sap/bc/adt/oo/` | `classes`, `interfaces` | -| **Packages** | `/sap/bc/adt/packages/` | `packagesV1` | +| Area | Path | Schemas Used | +| ------------- | ----------------------- | -------------------------------------- | +| **CTS** | `/sap/bc/adt/cts/` | `transportmanagment*`, `transportfind` | +| **ATC** | `/sap/bc/adt/atc/` | `atcworklist` | +| **Discovery** | `/sap/bc/adt/discovery` | `discovery` | +| **OO** | `/sap/bc/adt/oo/` | `classes`, `interfaces` | +| **Packages** | `/sap/bc/adt/packages/` | `packagesV1` | ## Running Tests @@ -171,10 +173,11 @@ The `schemas.ts` file **automatically wraps all schemas** with speci's `_infer` import { mySchema } from '../../schemas'; const myContract = contract({ - post: (params?) => http.post('/path', { - body: mySchema, // ✅ Already speci-compatible! - responses: { 200: otherSchema }, - }), + post: (params?) => + http.post('/path', { + body: mySchema, // ✅ Already speci-compatible! + responses: { 200: otherSchema }, + }), }); ``` @@ -188,7 +191,7 @@ const myContract = contract({ // adt-schemas is NOT responsible for speci compatibility // ❌ WRONG: Import directly from @abapify/adt-schemas -import { mySchema } from '@abapify/adt-schemas'; // ❌ Bypasses schemas.ts +import { mySchema } from '@abapify/adt-schemas'; // ❌ Bypasses schemas.ts ``` ### ✅ ALWAYS Do This @@ -204,11 +207,11 @@ responses: { 200: mySchema } ### Why This Architecture? -| Package | Responsibility | -|---------|---------------| -| **ts-xsd** | Generic W3C XSD parsing/building - NO speci knowledge | -| **adt-schemas** | SAP ADT schemas using ts-xsd - NO speci knowledge | -| **adt-contracts** | Integration layer - bridges ts-xsd and speci | -| **speci** | REST contract library - defines Inferrable interface | +| Package | Responsibility | +| ----------------- | ----------------------------------------------------- | +| **ts-xsd** | Generic W3C XSD parsing/building - NO speci knowledge | +| **adt-schemas** | SAP ADT schemas using ts-xsd - NO speci knowledge | +| **adt-contracts** | Integration layer - bridges ts-xsd and speci | +| **speci** | REST contract library - defines Inferrable interface | The `schemas.ts` file is the **only place** where ts-xsd and speci are bridged. All schemas are automatically wrapped with `toSpeciSchema()` on export, keeping all packages independent and maintainable. diff --git a/packages/adt-contracts/config/contracts/content-type-mapping.ts b/packages/adt-contracts/config/contracts/content-type-mapping.ts index df06a9e6..fd6b5c10 100644 --- a/packages/adt-contracts/config/contracts/content-type-mapping.ts +++ b/packages/adt-contracts/config/contracts/content-type-mapping.ts @@ -1,6 +1,6 @@ /** * Content-Type to Schema Name Mapping - * + * * Used by contract generator to map SAP ADT content types to schema names. */ @@ -8,77 +8,79 @@ export const contentTypeMapping = { mapping: { 'application/vnd.sap.atc.customizing.v1+xml': 'atc', 'application/vnd.sap.adt.atc.customizing.v1+xml': 'atc', - + 'application/vnd.sap.atc.worklist.v1+xml': 'atcworklist', 'application/vnd.sap.adt.atc.worklist.v1+xml': 'atcworklist', - + 'application/vnd.sap.atc.run.v1+xml': 'atcRun', 'application/vnd.sap.adt.atc.run.v1+xml': 'atcRun', - + 'application/vnd.sap.atc.exemption.v1+xml': 'atcexemption', 'application/vnd.sap.adt.atc.exemption.v1+xml': 'atcexemption', - + 'application/vnd.sap.atc.finding.v1+xml': 'atcfinding', 'application/vnd.sap.adt.atc.finding.v1+xml': 'atcfinding', - + 'application/vnd.sap.atc.info.v1+xml': 'atcinfo', 'application/vnd.sap.adt.atc.info.v1+xml': 'atcinfo', - + 'application/vnd.sap.atc.object.v1+xml': 'atcobject', 'application/vnd.sap.adt.atc.object.v1+xml': 'atcobject', - + 'application/vnd.sap.atc.result.v1+xml': 'atcresult', 'application/vnd.sap.adt.atc.result.v1+xml': 'atcresult', - + 'application/vnd.sap.atc.resultquery.v1+xml': 'atcresultquery', 'application/vnd.sap.adt.atc.resultquery.v1+xml': 'atcresultquery', - + 'application/vnd.sap.adt.chkcv1+xml': 'atc', 'application/vnd.sap.adt.chkc.v1+xml': 'atc', - + 'application/vnd.sap.adt.chkev2+xml': 'atcexemption', 'application/vnd.sap.adt.chke.v2+xml': 'atcexemption', - + 'application/vnd.sap.adt.chkov1+xml': 'atc', 'application/vnd.sap.adt.chko.v1+xml': 'atc', - + 'application/vnd.sap.adt.chkvv4+xml': 'atc', 'application/vnd.sap.adt.chkv.v4+xml': 'atc', - + 'application/vnd.sap.adt.atc.objectreferences.v1+xml': 'atc', 'application/vnd.sap.adt.atc.autoqf.proposal.v1+xml': 'atc', 'application/vnd.sap.adt.atc.autoqf.selection.v1+xml': 'atc', 'application/vnd.sap.adt.atc.genericrefactoring.v1+xml': 'atc', - + 'application/vnd.sap.adt.oo.classes.v4+xml': 'classes', 'application/vnd.sap.adt.oo.classes.v3+xml': 'classes', 'application/vnd.sap.adt.oo.classes.v2+xml': 'classes', 'application/vnd.sap.adt.oo.classes+xml': 'classes', - + 'application/vnd.sap.adt.oo.interfaces.v2+xml': 'interfaces', 'application/vnd.sap.adt.oo.interfaces+xml': 'interfaces', - + 'application/vnd.sap.adt.packages.v1+xml': 'packagesV1', 'application/vnd.sap.adt.packages+xml': 'packagesV1', - + 'application/vnd.sap.adt.transportmanagement.v1+xml': 'transportmanagment', - 'application/vnd.sap.adt.cts.transportrequests.v1+xml': 'transportmanagment', - 'application/vnd.sap.adt.cts.transportrequest.v1+xml': 'transportmanagmentSingle', - + 'application/vnd.sap.adt.cts.transportrequests.v1+xml': + 'transportmanagment', + 'application/vnd.sap.adt.cts.transportrequest.v1+xml': + 'transportmanagmentSingle', + 'application/vnd.sap.adt.cts.transportsearch.v1+xml': 'transportfind', - + 'application/atomsvc+xml': 'discovery', - + 'application/vnd.sap.adt.checkrun.v1+xml': 'checkrun', 'application/vnd.sap.adt.checklist.v1+xml': 'checklist', - + 'application/vnd.sap.adt.configuration.v1+xml': 'configuration', 'application/vnd.sap.adt.configurations.v1+xml': 'configurations', }, - + fallbacks: { '/atc/worklists': 'atcworklist', - '/atc/runs': 'atcworklist', + '/atc/runs': 'atcworklist', '/atc/results': 'atcworklist', '/atc/exemptions': 'atcexemption', '/atc/customizing': 'atc', diff --git a/packages/adt-contracts/config/contracts/enabled-endpoints.ts b/packages/adt-contracts/config/contracts/enabled-endpoints.ts index 5905f630..74979c34 100644 --- a/packages/adt-contracts/config/contracts/enabled-endpoints.ts +++ b/packages/adt-contracts/config/contracts/enabled-endpoints.ts @@ -1,12 +1,12 @@ /** * Enabled Endpoints Configuration - * + * * Type-safe configuration for contract generation. * Supports simple patterns (string/regex) and advanced config objects. - * + * * @example Simple pattern - generates all methods * '/sap/bc/adt/cts/transportrequests/**' - * + * * @example Advanced config - specific methods only * { path: '/sap/bc/adt/atc/runs', methods: ['POST'] } */ @@ -26,16 +26,16 @@ export const enabledEndpoints: EndpointDefinition[] = [ path: '/sap/bc/adt/atc/results', description: 'ATC check results', }, - + // CTS - Transport management '/sap/bc/adt/cts/transportrequests/**', - + // NOTE: OO classes/interfaces use manual contracts in src/adt/oo/ // They use the crud() helper which is simpler than code generation - + // Packages '/sap/bc/adt/packages', - + // Discovery '/sap/bc/adt/discovery', ]; diff --git a/packages/adt-contracts/docs/adt-endpoints.md b/packages/adt-contracts/docs/adt-endpoints.md index cbb04cc6..36575367 100644 --- a/packages/adt-contracts/docs/adt-endpoints.md +++ b/packages/adt-contracts/docs/adt-endpoints.md @@ -7,17 +7,17 @@ These endpoints have generated contracts in `src/generated/adt/`: -| Endpoint | Title | Category | -|----------|-------|----------| -| `/sap/bc/adt/atc/results` | ATC results | atcresults | -| `/sap/bc/adt/atc/worklists` | ATC worklist | atcworklists | -| `/sap/bc/adt/cts/transportrequests` | Transport Management | transportmanagement | -| `/sap/bc/adt/cts/transportrequests/reference` | Transport Management | transportmanagementref | -| `/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations` | Transport Search Configurations | transportconfigurations | -| `/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata` | Transport Search Configurations (Metadata) | transportconfigurationsmetadata | -| `/sap/bc/adt/packages` | Package | devck | -| `/sap/bc/adt/packages/settings` | Package Settings | settings | -| `/sap/bc/adt/packages/validation` | Package Name Validation | devck/validation | +| Endpoint | Title | Category | +| ---------------------------------------------------------------------- | ------------------------------------------ | ------------------------------- | +| `/sap/bc/adt/atc/results` | ATC results | atcresults | +| `/sap/bc/adt/atc/worklists` | ATC worklist | atcworklists | +| `/sap/bc/adt/cts/transportrequests` | Transport Management | transportmanagement | +| `/sap/bc/adt/cts/transportrequests/reference` | Transport Management | transportmanagementref | +| `/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations` | Transport Search Configurations | transportconfigurations | +| `/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata` | Transport Search Configurations (Metadata) | transportconfigurationsmetadata | +| `/sap/bc/adt/packages` | Package | devck | +| `/sap/bc/adt/packages/settings` | Package Settings | settings | +| `/sap/bc/adt/packages/validation` | Package Name Validation | devck/validation | ## Available Endpoints (Not Yet Enabled) (530) @@ -28,9 +28,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt` | ADT HTTP(S) Endpoint | +| Endpoint | Title | +| ------------- | ----------------------------- | +| `/sap/bc/adt` | ADT HTTP(S) Endpoint | | `/sap/bc/adt` | ADT Stateful HTTP(S) Endpoint |
@@ -40,13 +40,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/abapdaemons/applications` | ABAP Daemon | -| `/sap/bc/adt/abapdaemons/applications/$configuration` | JSON Configuration | -| `/sap/bc/adt/abapdaemons/applications/$schema` | JSON Schema | -| `/sap/bc/adt/abapdaemons/applications/source/formatter` | JSON Formatter | -| `/sap/bc/adt/abapdaemons/applications/validation` | ABAP Daemon Name Validation | +| Endpoint | Title | +| ------------------------------------------------------- | --------------------------- | +| `/sap/bc/adt/abapdaemons/applications` | ABAP Daemon | +| `/sap/bc/adt/abapdaemons/applications/$configuration` | JSON Configuration | +| `/sap/bc/adt/abapdaemons/applications/$schema` | JSON Schema | +| `/sap/bc/adt/abapdaemons/applications/source/formatter` | JSON Formatter | +| `/sap/bc/adt/abapdaemons/applications/validation` | ABAP Daemon Name Validation |
@@ -55,20 +55,20 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/abapsource/abapdoc/exportjobs` | Export ABAP Doc | -| `/sap/bc/adt/abapsource/cleanup/source` | Cleanup | -| `/sap/bc/adt/abapsource/codecompletion/elementinfo` | Element Info | -| `/sap/bc/adt/abapsource/codecompletion/hanacatalogaccess` | HANA Catalog Access | -| `/sap/bc/adt/abapsource/codecompletion/insertion` | Code Insertion | -| `/sap/bc/adt/abapsource/codecompletion/proposal` | Code Completion | -| `/sap/bc/adt/abapsource/occurencemarkers` | Occurrence Markers | -| `/sap/bc/adt/abapsource/parsers/rnd/grammar` | Parser | -| `/sap/bc/adt/abapsource/prettyprinter` | Pretty Printer | -| `/sap/bc/adt/abapsource/prettyprinter/settings` | Pretty Printer Settings | -| `/sap/bc/adt/abapsource/syntax/configurations` | ABAP Syntax Configurations | -| `/sap/bc/adt/abapsource/typehierarchy` | Type Hierarchy | +| Endpoint | Title | +| --------------------------------------------------------- | -------------------------- | +| `/sap/bc/adt/abapsource/abapdoc/exportjobs` | Export ABAP Doc | +| `/sap/bc/adt/abapsource/cleanup/source` | Cleanup | +| `/sap/bc/adt/abapsource/codecompletion/elementinfo` | Element Info | +| `/sap/bc/adt/abapsource/codecompletion/hanacatalogaccess` | HANA Catalog Access | +| `/sap/bc/adt/abapsource/codecompletion/insertion` | Code Insertion | +| `/sap/bc/adt/abapsource/codecompletion/proposal` | Code Completion | +| `/sap/bc/adt/abapsource/occurencemarkers` | Occurrence Markers | +| `/sap/bc/adt/abapsource/parsers/rnd/grammar` | Parser | +| `/sap/bc/adt/abapsource/prettyprinter` | Pretty Printer | +| `/sap/bc/adt/abapsource/prettyprinter/settings` | Pretty Printer Settings | +| `/sap/bc/adt/abapsource/syntax/configurations` | ABAP Syntax Configurations | +| `/sap/bc/adt/abapsource/typehierarchy` | Type Hierarchy |
@@ -77,10 +77,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/abapunit/metadata` | ABAP Unit Metadata | -| `/sap/bc/adt/abapunit/testruns` | ABAP Unit Testruns | +| Endpoint | Title | +| ------------------------------------------ | ----------------------------- | +| `/sap/bc/adt/abapunit/metadata` | ABAP Unit Metadata | +| `/sap/bc/adt/abapunit/testruns` | ABAP Unit Testruns | | `/sap/bc/adt/abapunit/testruns/evaluation` | ABAP Unit Testruns Evaluation |
@@ -90,13 +90,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/acm/dcl/elementinfo` | DCL Element Info Resource | -| `/sap/bc/adt/acm/dcl/parser` | DCL Parser Information Resource | +| Endpoint | Title | +| -------------------------------------- | ------------------------------- | +| `/sap/bc/adt/acm/dcl/elementinfo` | DCL Element Info Resource | +| `/sap/bc/adt/acm/dcl/parser` | DCL Parser Information Resource | | `/sap/bc/adt/acm/dcl/repositoryaccess` | ACM Repository Objects Resource | -| `/sap/bc/adt/acm/dcl/sources` | DCL Sources | -| `/sap/bc/adt/acm/dcl/validation` | DCL Sources Validation | +| `/sap/bc/adt/acm/dcl/sources` | DCL Sources | +| `/sap/bc/adt/acm/dcl/validation` | DCL Sources Validation |
@@ -105,12 +105,12 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/activation` | Activation | -| `/sap/bc/adt/activation/inactiveobjects` | Inactive Objects | -| `/sap/bc/adt/activation/results` | Activation result | -| `/sap/bc/adt/activation/runs` | Activation in background | +| Endpoint | Title | +| ---------------------------------------- | ------------------------ | +| `/sap/bc/adt/activation` | Activation | +| `/sap/bc/adt/activation/inactiveobjects` | Inactive Objects | +| `/sap/bc/adt/activation/results` | Activation result | +| `/sap/bc/adt/activation/runs` | Activation in background |
@@ -119,8 +119,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| -------------------------------- | ------------------ | | `/sap/bc/adt/amdp/debugger/main` | AMDP Debugger Main |
@@ -130,8 +130,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------- | ----------------------- | | `/sap/bc/adt/ana/aqd` | Analytical custom query |
@@ -141,8 +141,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------- | ------------ | | `/sap/bc/adt/apireleases` | API Releases |
@@ -152,18 +152,18 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/applicationjob/catalogs` | Application Job Catalog Entry | -| `/sap/bc/adt/applicationjob/catalogs/$configuration` | JSON Configuration | -| `/sap/bc/adt/applicationjob/catalogs/$schema` | JSON Schema | -| `/sap/bc/adt/applicationjob/catalogs/source/formatter` | JSON Formatter | -| `/sap/bc/adt/applicationjob/catalogs/validation` | Application Job Catalog Entry Name Validation | -| `/sap/bc/adt/applicationjob/templates` | Application Job Template | -| `/sap/bc/adt/applicationjob/templates/$configuration` | JSON Configuration | -| `/sap/bc/adt/applicationjob/templates/$schema` | JSON Schema | -| `/sap/bc/adt/applicationjob/templates/source/formatter` | JSON Formatter | -| `/sap/bc/adt/applicationjob/templates/validation` | Application Job Template Name Validation | +| Endpoint | Title | +| ------------------------------------------------------- | --------------------------------------------- | +| `/sap/bc/adt/applicationjob/catalogs` | Application Job Catalog Entry | +| `/sap/bc/adt/applicationjob/catalogs/$configuration` | JSON Configuration | +| `/sap/bc/adt/applicationjob/catalogs/$schema` | JSON Schema | +| `/sap/bc/adt/applicationjob/catalogs/source/formatter` | JSON Formatter | +| `/sap/bc/adt/applicationjob/catalogs/validation` | Application Job Catalog Entry Name Validation | +| `/sap/bc/adt/applicationjob/templates` | Application Job Template | +| `/sap/bc/adt/applicationjob/templates/$configuration` | JSON Configuration | +| `/sap/bc/adt/applicationjob/templates/$schema` | JSON Schema | +| `/sap/bc/adt/applicationjob/templates/source/formatter` | JSON Formatter | +| `/sap/bc/adt/applicationjob/templates/validation` | Application Job Template Name Validation |
@@ -172,13 +172,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/applicationlog/objects` | Application Log Object | -| `/sap/bc/adt/applicationlog/objects/$configuration` | JSON Configuration | -| `/sap/bc/adt/applicationlog/objects/$schema` | JSON Schema | -| `/sap/bc/adt/applicationlog/objects/source/formatter` | JSON Formatter | -| `/sap/bc/adt/applicationlog/objects/validation` | Application Log Object Name Validation | +| Endpoint | Title | +| ----------------------------------------------------- | -------------------------------------- | +| `/sap/bc/adt/applicationlog/objects` | Application Log Object | +| `/sap/bc/adt/applicationlog/objects/$configuration` | JSON Configuration | +| `/sap/bc/adt/applicationlog/objects/$schema` | JSON Schema | +| `/sap/bc/adt/applicationlog/objects/source/formatter` | JSON Formatter | +| `/sap/bc/adt/applicationlog/objects/validation` | Application Log Object Name Validation |
@@ -187,24 +187,24 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/aps/com/sod1` | Open Discovery API Package | -| `/sap/bc/adt/aps/com/sod1/docuprogramobjtype/values` | Type | -| `/sap/bc/adt/aps/com/sod1/packagetype/values` | Type | -| `/sap/bc/adt/aps/com/sod1/tagcategory/values` | Tag Categories | -| `/sap/bc/adt/aps/com/sod1/tagvaluehelp/values` | Tag Value Help | -| `/sap/bc/adt/aps/com/sod1/validation` | Open Discovery API Package Name Validation | -| `/sap/bc/adt/aps/com/sod2` | Open Discovery API Package Assignment | -| `/sap/bc/adt/aps/com/sod2/apiobjecttype/values` | API Object Types | -| `/sap/bc/adt/aps/com/sod2/consumptionbundlename/values` | Consumption Bundle Names | -| `/sap/bc/adt/aps/com/sod2/consumptionbundletype/values` | Consumption Bundle Types | -| `/sap/bc/adt/aps/com/sod2/leadingbusinessobjecttype/values` | Leading Business Object Type | -| `/sap/bc/adt/aps/com/sod2/odatav4groupservice/values` | Allowed OData V4 Services | -| `/sap/bc/adt/aps/com/sod2/tadir/values` | Allowed TADIR Values | -| `/sap/bc/adt/aps/com/sod2/validation` | Open Discovery API Package Assignment Name Validation | -| `/sap/bc/adt/aps/common/sbc1` | Technical Object Group | -| `/sap/bc/adt/aps/common/sbc1/validation` | Technical Object Group Name Validation | +| Endpoint | Title | +| ----------------------------------------------------------- | ----------------------------------------------------- | +| `/sap/bc/adt/aps/com/sod1` | Open Discovery API Package | +| `/sap/bc/adt/aps/com/sod1/docuprogramobjtype/values` | Type | +| `/sap/bc/adt/aps/com/sod1/packagetype/values` | Type | +| `/sap/bc/adt/aps/com/sod1/tagcategory/values` | Tag Categories | +| `/sap/bc/adt/aps/com/sod1/tagvaluehelp/values` | Tag Value Help | +| `/sap/bc/adt/aps/com/sod1/validation` | Open Discovery API Package Name Validation | +| `/sap/bc/adt/aps/com/sod2` | Open Discovery API Package Assignment | +| `/sap/bc/adt/aps/com/sod2/apiobjecttype/values` | API Object Types | +| `/sap/bc/adt/aps/com/sod2/consumptionbundlename/values` | Consumption Bundle Names | +| `/sap/bc/adt/aps/com/sod2/consumptionbundletype/values` | Consumption Bundle Types | +| `/sap/bc/adt/aps/com/sod2/leadingbusinessobjecttype/values` | Leading Business Object Type | +| `/sap/bc/adt/aps/com/sod2/odatav4groupservice/values` | Allowed OData V4 Services | +| `/sap/bc/adt/aps/com/sod2/tadir/values` | Allowed TADIR Values | +| `/sap/bc/adt/aps/com/sod2/validation` | Open Discovery API Package Assignment Name Validation | +| `/sap/bc/adt/aps/common/sbc1` | Technical Object Group | +| `/sap/bc/adt/aps/common/sbc1/validation` | Technical Object Group Name Validation |
@@ -213,31 +213,31 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/atc/approvers` | List of Approvers | -| `/sap/bc/adt/atc/autoqf/worklist` | Autoquickfix | -| `/sap/bc/adt/atc/ccstunnel` | CCS Tunnel | -| `/sap/bc/adt/atc/checkcategories` | Check Category | -| `/sap/bc/adt/atc/checkcategories/validation` | Check Category Name Validation | -| `/sap/bc/adt/atc/checkexemptions` | Exemption | -| `/sap/bc/adt/atc/checkexemptions/validation` | Exemption Name Validation | -| `/sap/bc/adt/atc/checkexemptionsview` | Exemptions View | -| `/sap/bc/adt/atc/checkfailures` | Check Failure | -| `/sap/bc/adt/atc/checkfailures/logs` | Check Failure Details | -| `/sap/bc/adt/atc/checks` | Check | -| `/sap/bc/adt/atc/checks/validation` | Check Name Validation | -| `/sap/bc/adt/atc/checkvariants` | Check Variant | -| `/sap/bc/adt/atc/checkvariants/codecompletion/templates` | CHKV Templates | -| `/sap/bc/adt/atc/checkvariants/validation` | Check Variant Name Validation | -| `/sap/bc/adt/atc/configuration/configurations` | ATC Configuration | -| `/sap/bc/adt/atc/configuration/metadata` | ATC Configuration (Metadata) | -| `/sap/bc/adt/atc/customizing` | ATC customizing | -| `/sap/bc/adt/atc/exemptions/apply` | Exemptions Apply | -| `/sap/bc/adt/atc/items` | ATC Items | -| `/sap/bc/adt/atc/result/worklist` | Result Worklist | -| `/sap/bc/adt/atc/runs` | ATC runs | -| `/sap/bc/adt/atc/variants` | List of Variants | +| Endpoint | Title | +| -------------------------------------------------------- | ------------------------------ | +| `/sap/bc/adt/atc/approvers` | List of Approvers | +| `/sap/bc/adt/atc/autoqf/worklist` | Autoquickfix | +| `/sap/bc/adt/atc/ccstunnel` | CCS Tunnel | +| `/sap/bc/adt/atc/checkcategories` | Check Category | +| `/sap/bc/adt/atc/checkcategories/validation` | Check Category Name Validation | +| `/sap/bc/adt/atc/checkexemptions` | Exemption | +| `/sap/bc/adt/atc/checkexemptions/validation` | Exemption Name Validation | +| `/sap/bc/adt/atc/checkexemptionsview` | Exemptions View | +| `/sap/bc/adt/atc/checkfailures` | Check Failure | +| `/sap/bc/adt/atc/checkfailures/logs` | Check Failure Details | +| `/sap/bc/adt/atc/checks` | Check | +| `/sap/bc/adt/atc/checks/validation` | Check Name Validation | +| `/sap/bc/adt/atc/checkvariants` | Check Variant | +| `/sap/bc/adt/atc/checkvariants/codecompletion/templates` | CHKV Templates | +| `/sap/bc/adt/atc/checkvariants/validation` | Check Variant Name Validation | +| `/sap/bc/adt/atc/configuration/configurations` | ATC Configuration | +| `/sap/bc/adt/atc/configuration/metadata` | ATC Configuration (Metadata) | +| `/sap/bc/adt/atc/customizing` | ATC customizing | +| `/sap/bc/adt/atc/exemptions/apply` | Exemptions Apply | +| `/sap/bc/adt/atc/items` | ATC Items | +| `/sap/bc/adt/atc/result/worklist` | Result Worklist | +| `/sap/bc/adt/atc/runs` | ATC runs | +| `/sap/bc/adt/atc/variants` | List of Variants |
@@ -246,10 +246,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------- | ------------- | | `/sap/bc/adt/ato/notifications` | Notifications | -| `/sap/bc/adt/ato/settings` | Settings | +| `/sap/bc/adt/ato/settings` | Settings |
@@ -258,11 +258,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/aunit/dbtestdoubles/cds/dependencies` | Get DDL Dependency | +| Endpoint | Title | +| ------------------------------------------------------- | ----------------------- | +| `/sap/bc/adt/aunit/dbtestdoubles/cds/dependencies` | Get DDL Dependency | | `/sap/bc/adt/aunit/dbtestdoubles/cds/dependencies/info` | Get DDL dependency info | -| `/sap/bc/adt/aunit/dbtestdoubles/cds/validation` | Validate DDL entity | +| `/sap/bc/adt/aunit/dbtestdoubles/cds/validation` | Validate DDL entity |
@@ -271,13 +271,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/bct/smbctyp` | Maintenance Object | -| `/sap/bc/adt/bct/smbctyp/$configuration` | JSON Configuration | -| `/sap/bc/adt/bct/smbctyp/$schema` | JSON Schema | -| `/sap/bc/adt/bct/smbctyp/source/formatter` | JSON Formatter | -| `/sap/bc/adt/bct/smbctyp/validation` | Maintenance Object Name Validation | +| Endpoint | Title | +| ------------------------------------------ | ---------------------------------- | +| `/sap/bc/adt/bct/smbctyp` | Maintenance Object | +| `/sap/bc/adt/bct/smbctyp/$configuration` | JSON Configuration | +| `/sap/bc/adt/bct/smbctyp/$schema` | JSON Schema | +| `/sap/bc/adt/bct/smbctyp/source/formatter` | JSON Formatter | +| `/sap/bc/adt/bct/smbctyp/validation` | Maintenance Object Name Validation |
@@ -286,12 +286,12 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/bo/behaviordefinitions` | Behavior Definition | -| `/sap/bc/adt/bo/behaviordefinitions/parser/info` | Behavior Definition Parser Info | -| `/sap/bc/adt/bo/behaviordefinitions/source/formatter` | Source Formatter | -| `/sap/bc/adt/bo/behaviordefinitions/validation` | Behavior Definition Validation | +| Endpoint | Title | +| ----------------------------------------------------- | ------------------------------- | +| `/sap/bc/adt/bo/behaviordefinitions` | Behavior Definition | +| `/sap/bc/adt/bo/behaviordefinitions/parser/info` | Behavior Definition Parser Info | +| `/sap/bc/adt/bo/behaviordefinitions/source/formatter` | Source Formatter | +| `/sap/bc/adt/bo/behaviordefinitions/validation` | Behavior Definition Validation |
@@ -300,16 +300,16 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/bopf/businessobjects` | Business Objects | -| `/sap/bc/adt/bopf/businessobjects/$constants` | Interface constants | -| `/sap/bc/adt/bopf/businessobjects/$contentassist` | Contentassist | -| `/sap/bc/adt/bopf/businessobjects/$generation` | Generation | -| `/sap/bc/adt/bopf/businessobjects/$search` | Class Search | -| `/sap/bc/adt/bopf/businessobjects/$structurefields` | BO Node Structure Fields | -| `/sap/bc/adt/bopf/businessobjects/$synchronize` | Synchronize Behaviour Definition | -| `/sap/bc/adt/bopf/businessobjects/$validation` | Validation | +| Endpoint | Title | +| --------------------------------------------------- | -------------------------------- | +| `/sap/bc/adt/bopf/businessobjects` | Business Objects | +| `/sap/bc/adt/bopf/businessobjects/$constants` | Interface constants | +| `/sap/bc/adt/bopf/businessobjects/$contentassist` | Contentassist | +| `/sap/bc/adt/bopf/businessobjects/$generation` | Generation | +| `/sap/bc/adt/bopf/businessobjects/$search` | Class Search | +| `/sap/bc/adt/bopf/businessobjects/$structurefields` | BO Node Structure Fields | +| `/sap/bc/adt/bopf/businessobjects/$synchronize` | Synchronize Behaviour Definition | +| `/sap/bc/adt/bopf/businessobjects/$validation` | Validation |
@@ -318,10 +318,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------------------------------- | ----------------- | | `/sap/bc/adt/businesslogicextensions/badinameproposals` | badinameproposals | -| `/sap/bc/adt/businesslogicextensions/badis` | badis | +| `/sap/bc/adt/businesslogicextensions/badis` | badis |
@@ -330,44 +330,44 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/businessservices/bindings` | Service Binding | -| `/sap/bc/adt/businessservices/bindings/bindingtypes` | | -| `/sap/bc/adt/businessservices/bindings/bindingtypes/ina1` | | -| `/sap/bc/adt/businessservices/bindings/bindingtypes/sql1` | | -| `/sap/bc/adt/businessservices/bindings/schema` | | -| `/sap/bc/adt/businessservices/bindings/uiconfig` | | -| `/sap/bc/adt/businessservices/bindings/validate/servicedefinition` | | -| `/sap/bc/adt/businessservices/bindings/validation` | | -| `/sap/bc/adt/businessservices/consmodels` | Service Consumption Model | -| `/sap/bc/adt/businessservices/consmodels/codesample` | | -| `/sap/bc/adt/businessservices/consmodels/consdata/validate` | | -| `/sap/bc/adt/businessservices/consmodels/consumers` | | -| `/sap/bc/adt/businessservices/consmodels/validaterfc` | | -| `/sap/bc/adt/businessservices/consmodels/validatewsdl` | | -| `/sap/bc/adt/businessservices/consmodels/validation` | Service Consumption Model Name Validation | -| `/sap/bc/adt/businessservices/eeecevc` | Event Consumption Model | -| `/sap/bc/adt/businessservices/eeecevc/$configuration` | JSON Configuration | -| `/sap/bc/adt/businessservices/eeecevc/$schema` | JSON Schema | -| `/sap/bc/adt/businessservices/eeecevc/consumerdata` | | -| `/sap/bc/adt/businessservices/eeecevc/extractevtfile` | | -| `/sap/bc/adt/businessservices/eeecevc/generate` | | -| `/sap/bc/adt/businessservices/eeecevc/previewobjects` | | -| `/sap/bc/adt/businessservices/eeecevc/source/formatter` | JSON Formatter | -| `/sap/bc/adt/businessservices/eeecevc/validateartifact` | | -| `/sap/bc/adt/businessservices/eeecevc/validatemetadata` | | -| `/sap/bc/adt/businessservices/eeecevc/validation` | Event Consumption Model Name Validation | -| `/sap/bc/adt/businessservices/evtbevb` | Event Binding | -| `/sap/bc/adt/businessservices/evtbevb/$configuration` | JSON Configuration | -| `/sap/bc/adt/businessservices/evtbevb/$schema` | JSON Schema | -| `/sap/bc/adt/businessservices/evtbevb/source/formatter` | JSON Formatter | -| `/sap/bc/adt/businessservices/evtbevb/validation` | Event Binding Name Validation | -| `/sap/bc/adt/businessservices/evtbevv` | Event Version | -| `/sap/bc/adt/businessservices/evtbevv/validation` | Event Version Name Validation | -| `/sap/bc/adt/businessservices/odatav2` | OData V2 | -| `/sap/bc/adt/businessservices/odatav4` | OData V4 | -| `/sap/bc/adt/businessservices/release` | Service Binding Classification | +| Endpoint | Title | +| ------------------------------------------------------------------ | ----------------------------------------- | +| `/sap/bc/adt/businessservices/bindings` | Service Binding | +| `/sap/bc/adt/businessservices/bindings/bindingtypes` | | +| `/sap/bc/adt/businessservices/bindings/bindingtypes/ina1` | | +| `/sap/bc/adt/businessservices/bindings/bindingtypes/sql1` | | +| `/sap/bc/adt/businessservices/bindings/schema` | | +| `/sap/bc/adt/businessservices/bindings/uiconfig` | | +| `/sap/bc/adt/businessservices/bindings/validate/servicedefinition` | | +| `/sap/bc/adt/businessservices/bindings/validation` | | +| `/sap/bc/adt/businessservices/consmodels` | Service Consumption Model | +| `/sap/bc/adt/businessservices/consmodels/codesample` | | +| `/sap/bc/adt/businessservices/consmodels/consdata/validate` | | +| `/sap/bc/adt/businessservices/consmodels/consumers` | | +| `/sap/bc/adt/businessservices/consmodels/validaterfc` | | +| `/sap/bc/adt/businessservices/consmodels/validatewsdl` | | +| `/sap/bc/adt/businessservices/consmodels/validation` | Service Consumption Model Name Validation | +| `/sap/bc/adt/businessservices/eeecevc` | Event Consumption Model | +| `/sap/bc/adt/businessservices/eeecevc/$configuration` | JSON Configuration | +| `/sap/bc/adt/businessservices/eeecevc/$schema` | JSON Schema | +| `/sap/bc/adt/businessservices/eeecevc/consumerdata` | | +| `/sap/bc/adt/businessservices/eeecevc/extractevtfile` | | +| `/sap/bc/adt/businessservices/eeecevc/generate` | | +| `/sap/bc/adt/businessservices/eeecevc/previewobjects` | | +| `/sap/bc/adt/businessservices/eeecevc/source/formatter` | JSON Formatter | +| `/sap/bc/adt/businessservices/eeecevc/validateartifact` | | +| `/sap/bc/adt/businessservices/eeecevc/validatemetadata` | | +| `/sap/bc/adt/businessservices/eeecevc/validation` | Event Consumption Model Name Validation | +| `/sap/bc/adt/businessservices/evtbevb` | Event Binding | +| `/sap/bc/adt/businessservices/evtbevb/$configuration` | JSON Configuration | +| `/sap/bc/adt/businessservices/evtbevb/$schema` | JSON Schema | +| `/sap/bc/adt/businessservices/evtbevb/source/formatter` | JSON Formatter | +| `/sap/bc/adt/businessservices/evtbevb/validation` | Event Binding Name Validation | +| `/sap/bc/adt/businessservices/evtbevv` | Event Version | +| `/sap/bc/adt/businessservices/evtbevv/validation` | Event Version Name Validation | +| `/sap/bc/adt/businessservices/odatav2` | OData V2 | +| `/sap/bc/adt/businessservices/odatav4` | OData V4 | +| `/sap/bc/adt/businessservices/release` | Service Binding Classification |
@@ -376,13 +376,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/changedocuments/objects` | Change Document Object | -| `/sap/bc/adt/changedocuments/objects/$configuration` | JSON Configuration | -| `/sap/bc/adt/changedocuments/objects/$schema` | JSON Schema | -| `/sap/bc/adt/changedocuments/objects/source/formatter` | JSON Formatter | -| `/sap/bc/adt/changedocuments/objects/validation` | Change Document Object Name Validation | +| Endpoint | Title | +| ------------------------------------------------------ | -------------------------------------- | +| `/sap/bc/adt/changedocuments/objects` | Change Document Object | +| `/sap/bc/adt/changedocuments/objects/$configuration` | JSON Configuration | +| `/sap/bc/adt/changedocuments/objects/$schema` | JSON Schema | +| `/sap/bc/adt/changedocuments/objects/source/formatter` | JSON Formatter | +| `/sap/bc/adt/changedocuments/objects/validation` | Change Document Object Name Validation |
@@ -391,9 +391,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/checkruns` | Check | +| Endpoint | Title | +| --------------------------------- | --------- | +| `/sap/bc/adt/checkruns` | Check | | `/sap/bc/adt/checkruns/reporters` | Reporters |
@@ -403,8 +403,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------------- | --------------- | | `/sap/bc/adt/classifications` | Classifications |
@@ -414,14 +414,14 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/cmp_code_composer/cmpt` | Code Composer Template | -| `/sap/bc/adt/cmp_code_composer/cmpt/validation` | Code Composer Template Name Validation | -| `/sap/bc/adt/cmp_code_composer/cmptare` | Area | -| `/sap/bc/adt/cmp_code_composer/cmptare/validation` | Area Name Validation | -| `/sap/bc/adt/cmp_code_composer/cmptfun` | Function | -| `/sap/bc/adt/cmp_code_composer/cmptfun/validation` | Function Name Validation | +| Endpoint | Title | +| -------------------------------------------------- | -------------------------------------- | +| `/sap/bc/adt/cmp_code_composer/cmpt` | Code Composer Template | +| `/sap/bc/adt/cmp_code_composer/cmpt/validation` | Code Composer Template Name Validation | +| `/sap/bc/adt/cmp_code_composer/cmptare` | Area | +| `/sap/bc/adt/cmp_code_composer/cmptare/validation` | Area Name Validation | +| `/sap/bc/adt/cmp_code_composer/cmptfun` | Function | +| `/sap/bc/adt/cmp_code_composer/cmptfun/validation` | Function Name Validation |
@@ -430,13 +430,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/crosstrace/activations` | ABAP Cross Trace: Activations | -| `/sap/bc/adt/crosstrace/components` | ABAP Cross Trace: Components | +| Endpoint | Title | +| -------------------------------------- | ------------------------------- | +| `/sap/bc/adt/crosstrace/activations` | ABAP Cross Trace: Activations | +| `/sap/bc/adt/crosstrace/components` | ABAP Cross Trace: Components | | `/sap/bc/adt/crosstrace/request_types` | ABAP Cross Trace: Request Types | -| `/sap/bc/adt/crosstrace/traces` | ABAP Cross Trace: Traces | -| `/sap/bc/adt/crosstrace/urimapping` | ABAP Cross Trace: URI Mapping | +| `/sap/bc/adt/crosstrace/traces` | ABAP Cross Trace: Traces | +| `/sap/bc/adt/crosstrace/urimapping` | ABAP Cross Trace: URI Mapping |
@@ -445,10 +445,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------------- | ---------------- | | `/sap/bc/adt/cts/transportchecks` | Transport Checks | -| `/sap/bc/adt/cts/transports` | Transports | +| `/sap/bc/adt/cts/transports` | Transports |
@@ -457,13 +457,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/datapreview/amdp` | Data Preview for AMDP | -| `/sap/bc/adt/datapreview/amdpdebugger` | Data Preview for AMDP Debugger | -| `/sap/bc/adt/datapreview/cds` | Data Preview for CDS | -| `/sap/bc/adt/datapreview/ddic` | Modelled Data Preview for DDIC | -| `/sap/bc/adt/datapreview/freestyle` | Freestyle Data Preview for DDIC | +| Endpoint | Title | +| -------------------------------------- | ------------------------------- | +| `/sap/bc/adt/datapreview/amdp` | Data Preview for AMDP | +| `/sap/bc/adt/datapreview/amdpdebugger` | Data Preview for AMDP Debugger | +| `/sap/bc/adt/datapreview/cds` | Data Preview for CDS | +| `/sap/bc/adt/datapreview/ddic` | Modelled Data Preview for DDIC | +| `/sap/bc/adt/datapreview/freestyle` | Freestyle Data Preview for DDIC |
@@ -472,8 +472,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------- | ------------------------ | | `/sap/bc/adt/dataproviders` | Data Provider Repository |
@@ -483,101 +483,101 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/ddic/cds/annotation/definitions` | CDS Annotation Definitions | -| `/sap/bc/adt/ddic/cds/annotation/elementinfo` | Element Info for CDS Annotations | -| `/sap/bc/adt/ddic/codecompletion` | Code Completion Resource | -| `/sap/bc/adt/ddic/dataelements` | Data Element | -| `/sap/bc/adt/ddic/dataelements/docu/status` | Documentation Status | -| `/sap/bc/adt/ddic/dataelements/docu/supplements` | Supplement Documentations | -| `/sap/bc/adt/ddic/dataelements/validation` | Data Element Name Validation | -| `/sap/bc/adt/ddic/db/settings` | Technical Table Settings | -| `/sap/bc/adt/ddic/db/settings/dataClass/values` | Data Class Category | -| `/sap/bc/adt/ddic/db/settings/keyFields/values` | Key Area Fields | -| `/sap/bc/adt/ddic/db/settings/size/values` | Size Category | -| `/sap/bc/adt/ddic/db/settings/validation` | Technical Table Settings Name Validation | -| `/sap/bc/adt/ddic/dbprocedureproxies` | Database Procudre Proxies | -| `/sap/bc/adt/ddic/ddl/activeobject` | DDL Active Object Resource | -| `/sap/bc/adt/ddic/ddl/createstatements` | DDL sqlView Create Statement Resource | -| `/sap/bc/adt/ddic/ddl/ddicrepositoryaccess` | DDL Dictionary Repository Access Resource | -| `/sap/bc/adt/ddic/ddl/dependencies/graphdata` | DDL Dependency Analyzer Resource | -| `/sap/bc/adt/ddic/ddl/elementinfo` | DDL Dictionary Element Info Resource | -| `/sap/bc/adt/ddic/ddl/elementinfos` | Dictionary Mass Element Info Resource | -| `/sap/bc/adt/ddic/ddl/elementmappings` | DDL Element Mapping Resource | -| `/sap/bc/adt/ddic/ddl/elementmappings/strategies` | DDL Element Mapping Strategies Resource | -| `/sap/bc/adt/ddic/ddl/formatter/configurations` | DDL pretty printer configuration | -| `/sap/bc/adt/ddic/ddl/formatter/identifiers` | DDL Case Preserving Formatter for Identifiers | -| `/sap/bc/adt/ddic/ddl/parser` | DDL Parser Information Resource | -| `/sap/bc/adt/ddic/ddl/relatedObjects` | Related Objects Resource | -| `/sap/bc/adt/ddic/ddl/sources` | DDL Sources | -| `/sap/bc/adt/ddic/ddl/validation` | DDL Sources Validation | -| `/sap/bc/adt/ddic/ddla/formatter/identifiers` | DDLA Case Preserving Formatter for Identifiers | -| `/sap/bc/adt/ddic/ddla/parser/info` | DDLA Parser Info Resource | -| `/sap/bc/adt/ddic/ddla/repositoryaccess` | DDLA Dictionary Repository Access Resource | -| `/sap/bc/adt/ddic/ddla/sources` | Annotation Definition | -| `/sap/bc/adt/ddic/ddla/sources/validation` | Annotation Definition Name Validation | -| `/sap/bc/adt/ddic/ddla/textlengthcalc` | DDLA Text Length Calculator | -| `/sap/bc/adt/ddic/ddlx/annotation/chain` | Annotation chain resource | -| `/sap/bc/adt/ddic/ddlx/formatter/identifiers` | DDLX Case Preserving Formatter for Identifiers | -| `/sap/bc/adt/ddic/ddlx/parser/info` | DDLX Parser Info Resource | -| `/sap/bc/adt/ddic/ddlx/sources` | Metadata Extension | -| `/sap/bc/adt/ddic/ddlx/sources/validation` | Metadata Extension Name Validation | -| `/sap/bc/adt/ddic/domains` | Domain | -| `/sap/bc/adt/ddic/domains/validation` | Domain Name Validation | -| `/sap/bc/adt/ddic/drty/sources` | Type | -| `/sap/bc/adt/ddic/drty/sources/$navigation` | drty navigation support | -| `/sap/bc/adt/ddic/drty/sources/validation` | Type Name Validation | -| `/sap/bc/adt/ddic/drul/parser/info` | DRUL Parser Info Resource | -| `/sap/bc/adt/ddic/drul/sources` | Dependency Rule | -| `/sap/bc/adt/ddic/drul/sources/validation` | Dependency Rule Name Validation | -| `/sap/bc/adt/ddic/dsfd/sources` | Scalar Function | -| `/sap/bc/adt/ddic/dsfd/sources/$navigation` | dsfd navigation support | -| `/sap/bc/adt/ddic/dsfd/sources/validation` | Scalar Function Name Validation | -| `/sap/bc/adt/ddic/dsfi` | Scalar Function Implementation | -| `/sap/bc/adt/ddic/dsfi/$configuration` | JSON Configuration | -| `/sap/bc/adt/ddic/dsfi/$schema` | JSON Schema | -| `/sap/bc/adt/ddic/dsfi/source/formatter` | JSON Formatter | -| `/sap/bc/adt/ddic/dsfi/validation` | Scalar Function Implementation Name Validation | -| `/sap/bc/adt/ddic/dtdc/createstatements` | Dynamic View Cache Create SQL Statement Resource | -| `/sap/bc/adt/ddic/dtdc/parser/info` | Dynamic View Cache Parser Info Resource | -| `/sap/bc/adt/ddic/dtdc/sources` | Dynamic Cache | -| `/sap/bc/adt/ddic/dtdc/sources/validation` | Dynamic Cache Name Validation | -| `/sap/bc/adt/ddic/dteb/codecompletion/proposal` | Entity Buffer Code Completion | -| `/sap/bc/adt/ddic/dteb/elementinfo` | Entity Buffer Element Info | -| `/sap/bc/adt/ddic/dteb/formatter` | Entity Buffer Formatter | -| `/sap/bc/adt/ddic/dteb/navigation` | Entity Buffer Navigation Support | -| `/sap/bc/adt/ddic/dteb/parser/info` | Entity Buffer Parser Info Resource | -| `/sap/bc/adt/ddic/dteb/sources` | Entity Buffer | -| `/sap/bc/adt/ddic/dteb/sources/validation` | Entity Buffer Name Validation | -| `/sap/bc/adt/ddic/elementinfo` | Element Info Resource | -| `/sap/bc/adt/ddic/lockobjects/adjustment` | ENQU Lock Object Adjustment | -| `/sap/bc/adt/ddic/lockobjects/lockmodes` | ENQU Lock Mode Named Items | -| `/sap/bc/adt/ddic/lockobjects/sources` | Lock Object | -| `/sap/bc/adt/ddic/lockobjects/sources/validation` | Lock Object Name Validation | -| `/sap/bc/adt/ddic/lockobjects/tables` | ENQU Secondary Table Proposals | -| `/sap/bc/adt/ddic/lockobjects/validation` | ENQU Lock Object Validation | -| `/sap/bc/adt/ddic/logs/activationgraph` | DDIC Activation Graph Resource | -| `/sap/bc/adt/ddic/srvd/elementinfo` | Service Definition Element Info Resource | -| `/sap/bc/adt/ddic/srvd/formatter/identifiers` | SRVD Case Preserving Formatter for Identifiers | -| `/sap/bc/adt/ddic/srvd/parser/info` | SRVD Parser Info Resource | -| `/sap/bc/adt/ddic/srvd/services` | SRVD Services | -| `/sap/bc/adt/ddic/srvd/sources` | Service Definition | -| `/sap/bc/adt/ddic/srvd/sources/validation` | Service Definition Name Validation | -| `/sap/bc/adt/ddic/srvd/sourceTypes` | SRVD Source Types | -| `/sap/bc/adt/ddic/structures` | Structure | -| `/sap/bc/adt/ddic/structures/parser/info` | Structure Parser Info | -| `/sap/bc/adt/ddic/structures/validation` | Structure Name Validation | -| `/sap/bc/adt/ddic/tables` | Database Table | -| `/sap/bc/adt/ddic/tables/parser/info` | Table Parser Info | -| `/sap/bc/adt/ddic/tables/validation` | Database Table Name Validation | -| `/sap/bc/adt/ddic/tabletypes` | Table Type | -| `/sap/bc/adt/ddic/tabletypes/validation` | Table Type Name Validation | -| `/sap/bc/adt/ddic/typegroups` | TypeGroups | -| `/sap/bc/adt/ddic/typegroups/validation` | Validation | -| `/sap/bc/adt/ddic/validation` | DDIC SQSC Validation | -| `/sap/bc/adt/ddic/views` | Views | -| `/sap/bc/adt/ddic/views/$validation` | View Validation | +| Endpoint | Title | +| ------------------------------------------------- | ------------------------------------------------ | +| `/sap/bc/adt/ddic/cds/annotation/definitions` | CDS Annotation Definitions | +| `/sap/bc/adt/ddic/cds/annotation/elementinfo` | Element Info for CDS Annotations | +| `/sap/bc/adt/ddic/codecompletion` | Code Completion Resource | +| `/sap/bc/adt/ddic/dataelements` | Data Element | +| `/sap/bc/adt/ddic/dataelements/docu/status` | Documentation Status | +| `/sap/bc/adt/ddic/dataelements/docu/supplements` | Supplement Documentations | +| `/sap/bc/adt/ddic/dataelements/validation` | Data Element Name Validation | +| `/sap/bc/adt/ddic/db/settings` | Technical Table Settings | +| `/sap/bc/adt/ddic/db/settings/dataClass/values` | Data Class Category | +| `/sap/bc/adt/ddic/db/settings/keyFields/values` | Key Area Fields | +| `/sap/bc/adt/ddic/db/settings/size/values` | Size Category | +| `/sap/bc/adt/ddic/db/settings/validation` | Technical Table Settings Name Validation | +| `/sap/bc/adt/ddic/dbprocedureproxies` | Database Procudre Proxies | +| `/sap/bc/adt/ddic/ddl/activeobject` | DDL Active Object Resource | +| `/sap/bc/adt/ddic/ddl/createstatements` | DDL sqlView Create Statement Resource | +| `/sap/bc/adt/ddic/ddl/ddicrepositoryaccess` | DDL Dictionary Repository Access Resource | +| `/sap/bc/adt/ddic/ddl/dependencies/graphdata` | DDL Dependency Analyzer Resource | +| `/sap/bc/adt/ddic/ddl/elementinfo` | DDL Dictionary Element Info Resource | +| `/sap/bc/adt/ddic/ddl/elementinfos` | Dictionary Mass Element Info Resource | +| `/sap/bc/adt/ddic/ddl/elementmappings` | DDL Element Mapping Resource | +| `/sap/bc/adt/ddic/ddl/elementmappings/strategies` | DDL Element Mapping Strategies Resource | +| `/sap/bc/adt/ddic/ddl/formatter/configurations` | DDL pretty printer configuration | +| `/sap/bc/adt/ddic/ddl/formatter/identifiers` | DDL Case Preserving Formatter for Identifiers | +| `/sap/bc/adt/ddic/ddl/parser` | DDL Parser Information Resource | +| `/sap/bc/adt/ddic/ddl/relatedObjects` | Related Objects Resource | +| `/sap/bc/adt/ddic/ddl/sources` | DDL Sources | +| `/sap/bc/adt/ddic/ddl/validation` | DDL Sources Validation | +| `/sap/bc/adt/ddic/ddla/formatter/identifiers` | DDLA Case Preserving Formatter for Identifiers | +| `/sap/bc/adt/ddic/ddla/parser/info` | DDLA Parser Info Resource | +| `/sap/bc/adt/ddic/ddla/repositoryaccess` | DDLA Dictionary Repository Access Resource | +| `/sap/bc/adt/ddic/ddla/sources` | Annotation Definition | +| `/sap/bc/adt/ddic/ddla/sources/validation` | Annotation Definition Name Validation | +| `/sap/bc/adt/ddic/ddla/textlengthcalc` | DDLA Text Length Calculator | +| `/sap/bc/adt/ddic/ddlx/annotation/chain` | Annotation chain resource | +| `/sap/bc/adt/ddic/ddlx/formatter/identifiers` | DDLX Case Preserving Formatter for Identifiers | +| `/sap/bc/adt/ddic/ddlx/parser/info` | DDLX Parser Info Resource | +| `/sap/bc/adt/ddic/ddlx/sources` | Metadata Extension | +| `/sap/bc/adt/ddic/ddlx/sources/validation` | Metadata Extension Name Validation | +| `/sap/bc/adt/ddic/domains` | Domain | +| `/sap/bc/adt/ddic/domains/validation` | Domain Name Validation | +| `/sap/bc/adt/ddic/drty/sources` | Type | +| `/sap/bc/adt/ddic/drty/sources/$navigation` | drty navigation support | +| `/sap/bc/adt/ddic/drty/sources/validation` | Type Name Validation | +| `/sap/bc/adt/ddic/drul/parser/info` | DRUL Parser Info Resource | +| `/sap/bc/adt/ddic/drul/sources` | Dependency Rule | +| `/sap/bc/adt/ddic/drul/sources/validation` | Dependency Rule Name Validation | +| `/sap/bc/adt/ddic/dsfd/sources` | Scalar Function | +| `/sap/bc/adt/ddic/dsfd/sources/$navigation` | dsfd navigation support | +| `/sap/bc/adt/ddic/dsfd/sources/validation` | Scalar Function Name Validation | +| `/sap/bc/adt/ddic/dsfi` | Scalar Function Implementation | +| `/sap/bc/adt/ddic/dsfi/$configuration` | JSON Configuration | +| `/sap/bc/adt/ddic/dsfi/$schema` | JSON Schema | +| `/sap/bc/adt/ddic/dsfi/source/formatter` | JSON Formatter | +| `/sap/bc/adt/ddic/dsfi/validation` | Scalar Function Implementation Name Validation | +| `/sap/bc/adt/ddic/dtdc/createstatements` | Dynamic View Cache Create SQL Statement Resource | +| `/sap/bc/adt/ddic/dtdc/parser/info` | Dynamic View Cache Parser Info Resource | +| `/sap/bc/adt/ddic/dtdc/sources` | Dynamic Cache | +| `/sap/bc/adt/ddic/dtdc/sources/validation` | Dynamic Cache Name Validation | +| `/sap/bc/adt/ddic/dteb/codecompletion/proposal` | Entity Buffer Code Completion | +| `/sap/bc/adt/ddic/dteb/elementinfo` | Entity Buffer Element Info | +| `/sap/bc/adt/ddic/dteb/formatter` | Entity Buffer Formatter | +| `/sap/bc/adt/ddic/dteb/navigation` | Entity Buffer Navigation Support | +| `/sap/bc/adt/ddic/dteb/parser/info` | Entity Buffer Parser Info Resource | +| `/sap/bc/adt/ddic/dteb/sources` | Entity Buffer | +| `/sap/bc/adt/ddic/dteb/sources/validation` | Entity Buffer Name Validation | +| `/sap/bc/adt/ddic/elementinfo` | Element Info Resource | +| `/sap/bc/adt/ddic/lockobjects/adjustment` | ENQU Lock Object Adjustment | +| `/sap/bc/adt/ddic/lockobjects/lockmodes` | ENQU Lock Mode Named Items | +| `/sap/bc/adt/ddic/lockobjects/sources` | Lock Object | +| `/sap/bc/adt/ddic/lockobjects/sources/validation` | Lock Object Name Validation | +| `/sap/bc/adt/ddic/lockobjects/tables` | ENQU Secondary Table Proposals | +| `/sap/bc/adt/ddic/lockobjects/validation` | ENQU Lock Object Validation | +| `/sap/bc/adt/ddic/logs/activationgraph` | DDIC Activation Graph Resource | +| `/sap/bc/adt/ddic/srvd/elementinfo` | Service Definition Element Info Resource | +| `/sap/bc/adt/ddic/srvd/formatter/identifiers` | SRVD Case Preserving Formatter for Identifiers | +| `/sap/bc/adt/ddic/srvd/parser/info` | SRVD Parser Info Resource | +| `/sap/bc/adt/ddic/srvd/services` | SRVD Services | +| `/sap/bc/adt/ddic/srvd/sources` | Service Definition | +| `/sap/bc/adt/ddic/srvd/sources/validation` | Service Definition Name Validation | +| `/sap/bc/adt/ddic/srvd/sourceTypes` | SRVD Source Types | +| `/sap/bc/adt/ddic/structures` | Structure | +| `/sap/bc/adt/ddic/structures/parser/info` | Structure Parser Info | +| `/sap/bc/adt/ddic/structures/validation` | Structure Name Validation | +| `/sap/bc/adt/ddic/tables` | Database Table | +| `/sap/bc/adt/ddic/tables/parser/info` | Table Parser Info | +| `/sap/bc/adt/ddic/tables/validation` | Database Table Name Validation | +| `/sap/bc/adt/ddic/tabletypes` | Table Type | +| `/sap/bc/adt/ddic/tabletypes/validation` | Table Type Name Validation | +| `/sap/bc/adt/ddic/typegroups` | TypeGroups | +| `/sap/bc/adt/ddic/typegroups/validation` | Validation | +| `/sap/bc/adt/ddic/validation` | DDIC SQSC Validation | +| `/sap/bc/adt/ddic/views` | Views | +| `/sap/bc/adt/ddic/views/$validation` | View Validation |
@@ -586,22 +586,22 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/debugger` | Debugger | -| `/sap/bc/adt/debugger/actions` | Debugger Actions | -| `/sap/bc/adt/debugger/batch` | Debugger Batch Request | -| `/sap/bc/adt/debugger/breakpoints` | Breakpoints | -| `/sap/bc/adt/debugger/breakpoints/conditions` | Breakpoint Condition | +| Endpoint | Title | +| ----------------------------------------------- | ----------------------------- | +| `/sap/bc/adt/debugger` | Debugger | +| `/sap/bc/adt/debugger/actions` | Debugger Actions | +| `/sap/bc/adt/debugger/batch` | Debugger Batch Request | +| `/sap/bc/adt/debugger/breakpoints` | Breakpoints | +| `/sap/bc/adt/debugger/breakpoints/conditions` | Breakpoint Condition | | `/sap/bc/adt/debugger/breakpoints/messagetypes` | Message Types for Breakpoints | -| `/sap/bc/adt/debugger/breakpoints/statements` | Statements for Breakpoints | -| `/sap/bc/adt/debugger/breakpoints/validations` | Breakpoint Validation | -| `/sap/bc/adt/debugger/breakpoints/vit` | VIT Breakpoints | -| `/sap/bc/adt/debugger/listeners` | Debugger Listeners | -| `/sap/bc/adt/debugger/stack` | Debugger Stack | -| `/sap/bc/adt/debugger/systemareas` | System Areas | -| `/sap/bc/adt/debugger/variables` | Debugger Variables | -| `/sap/bc/adt/debugger/watchpoints` | Debugger Watchpoints | +| `/sap/bc/adt/debugger/breakpoints/statements` | Statements for Breakpoints | +| `/sap/bc/adt/debugger/breakpoints/validations` | Breakpoint Validation | +| `/sap/bc/adt/debugger/breakpoints/vit` | VIT Breakpoints | +| `/sap/bc/adt/debugger/listeners` | Debugger Listeners | +| `/sap/bc/adt/debugger/stack` | Debugger Stack | +| `/sap/bc/adt/debugger/systemareas` | System Areas | +| `/sap/bc/adt/debugger/variables` | Debugger Variables | +| `/sap/bc/adt/debugger/watchpoints` | Debugger Watchpoints |
@@ -610,10 +610,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/deletion/check` | Deletion check | -| `/sap/bc/adt/deletion/delete` | Deletion | +| Endpoint | Title | +| ----------------------------- | -------------- | +| `/sap/bc/adt/deletion/check` | Deletion check | +| `/sap/bc/adt/deletion/delete` | Deletion |
@@ -622,9 +622,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/development/handler/adtresource` | ADT Resource | +| Endpoint | Title | +| --------------------------------------------- | ------------------------ | +| `/sap/bc/adt/development/handler/adtresource` | ADT Resource | | `/sap/bc/adt/development/handler/application` | ADT Resource Application |
@@ -634,11 +634,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------ | --------------------------------------- | | `/sap/bc/adt/dlp/locationinfo` | Locations where logpoints are creatable | -| `/sap/bc/adt/dlp/logpoints` | Dynamic Logpoints | -| `/sap/bc/adt/dlp/logs/servers` | Transfer logpoint logs to database | +| `/sap/bc/adt/dlp/logpoints` | Dynamic Logpoints | +| `/sap/bc/adt/dlp/logs/servers` | Transfer logpoint logs to database |
@@ -647,17 +647,17 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/docu/abap/langu` | ABAP Language Help | -| `/sap/bc/adt/docu/dcl/langu` | DCL Language Help Resource | -| `/sap/bc/adt/docu/ddl/langu` | DDL Language Help Resource | -| `/sap/bc/adt/docu/ddla/langu` | DDLA Language Help Resource | -| `/sap/bc/adt/docu/ddlx/langu` | DDLX Language Help Resource | -| `/sap/bc/adt/docu/drul/langu` | DRUL Language Help Resource | -| `/sap/bc/adt/docu/dtdc/langu` | DTDC Language Help Resource | +| Endpoint | Title | +| ----------------------------- | ------------------------------------ | +| `/sap/bc/adt/docu/abap/langu` | ABAP Language Help | +| `/sap/bc/adt/docu/dcl/langu` | DCL Language Help Resource | +| `/sap/bc/adt/docu/ddl/langu` | DDL Language Help Resource | +| `/sap/bc/adt/docu/ddla/langu` | DDLA Language Help Resource | +| `/sap/bc/adt/docu/ddlx/langu` | DDLX Language Help Resource | +| `/sap/bc/adt/docu/drul/langu` | DRUL Language Help Resource | +| `/sap/bc/adt/docu/dtdc/langu` | DTDC Language Help Resource | | `/sap/bc/adt/docu/dteb/langu` | Entity Buffer Language Help Resource | -| `/sap/bc/adt/docu/srvd/langu` | SRVD Language Help Resource | +| `/sap/bc/adt/docu/srvd/langu` | SRVD Language Help Resource |
@@ -666,13 +666,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/documentation/ktd/documents` | Knowledge Transfer Document | -| `/sap/bc/adt/documentation/ktd/documents/codecompletion/links` | KTD Link Code Completion | -| `/sap/bc/adt/documentation/ktd/documents/codecompletion/templates` | KTD Syntax Templates | -| `/sap/bc/adt/documentation/ktd/documents/preview` | Dita Document Preview | -| `/sap/bc/adt/documentation/ktd/documents/validation` | KTD Document Validation | +| Endpoint | Title | +| ------------------------------------------------------------------ | --------------------------- | +| `/sap/bc/adt/documentation/ktd/documents` | Knowledge Transfer Document | +| `/sap/bc/adt/documentation/ktd/documents/codecompletion/links` | KTD Link Code Completion | +| `/sap/bc/adt/documentation/ktd/documents/codecompletion/templates` | KTD Syntax Templates | +| `/sap/bc/adt/documentation/ktd/documents/preview` | Dita Document Preview | +| `/sap/bc/adt/documentation/ktd/documents/validation` | KTD Document Validation |
@@ -681,13 +681,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/dummygroup/wbttt1a` | Dummy 1A object type | -| `/sap/bc/adt/dummygroup/wbttt1a/validation` | Dummy 1A object type Name Validation | -| `/sap/bc/adt/dummygroup/wbttt1a/white/yellow` | green description | -| `/sap/bc/adt/dummygroup/wbttt2a` | Dummy object type (for unit tests) | -| `/sap/bc/adt/dummygroup/wbttt2a/validation` | Dummy object type (for unit tests) Name Validation | +| Endpoint | Title | +| --------------------------------------------- | -------------------------------------------------- | +| `/sap/bc/adt/dummygroup/wbttt1a` | Dummy 1A object type | +| `/sap/bc/adt/dummygroup/wbttt1a/validation` | Dummy 1A object type Name Validation | +| `/sap/bc/adt/dummygroup/wbttt1a/white/yellow` | green description | +| `/sap/bc/adt/dummygroup/wbttt2a` | Dummy object type (for unit tests) | +| `/sap/bc/adt/dummygroup/wbttt2a/validation` | Dummy object type (for unit tests) Name Validation |
@@ -696,19 +696,19 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/enhancements/enhoxh` | Enhancement Implementation | -| `/sap/bc/adt/enhancements/enhoxh/validation` | Enhancement Implementation Name Validation | -| `/sap/bc/adt/enhancements/enhoxhb` | BAdI Implementation | -| `/sap/bc/adt/enhancements/enhoxhb/validation` | BAdI Implementation Name Validation | -| `/sap/bc/adt/enhancements/enhoxhh` | Source Code Plugin | -| `/sap/bc/adt/enhancements/enhoxhh/validation` | Object Name Validation | -| `/sap/bc/adt/enhancements/enhsxs` | Enhancement Spot | -| `/sap/bc/adt/enhancements/enhsxs/validation` | Enhancement Spot Name Validation | -| `/sap/bc/adt/enhancements/enhsxsb` | BAdI Enhancement Spot | -| `/sap/bc/adt/enhancements/enhsxsb/search` | Enhancement Spot Search | -| `/sap/bc/adt/enhancements/enhsxsb/validation` | BAdI Definition Validation | +| Endpoint | Title | +| --------------------------------------------- | ------------------------------------------ | +| `/sap/bc/adt/enhancements/enhoxh` | Enhancement Implementation | +| `/sap/bc/adt/enhancements/enhoxh/validation` | Enhancement Implementation Name Validation | +| `/sap/bc/adt/enhancements/enhoxhb` | BAdI Implementation | +| `/sap/bc/adt/enhancements/enhoxhb/validation` | BAdI Implementation Name Validation | +| `/sap/bc/adt/enhancements/enhoxhh` | Source Code Plugin | +| `/sap/bc/adt/enhancements/enhoxhh/validation` | Object Name Validation | +| `/sap/bc/adt/enhancements/enhsxs` | Enhancement Spot | +| `/sap/bc/adt/enhancements/enhsxs/validation` | Enhancement Spot Name Validation | +| `/sap/bc/adt/enhancements/enhsxsb` | BAdI Enhancement Spot | +| `/sap/bc/adt/enhancements/enhsxsb/search` | Enhancement Spot Search | +| `/sap/bc/adt/enhancements/enhsxsb/validation` | BAdI Definition Validation |
@@ -717,10 +717,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/feeds` | Feed Repository | -| `/sap/bc/adt/feeds/variants` | Feed Variants | +| Endpoint | Title | +| ---------------------------- | --------------- | +| `/sap/bc/adt/feeds` | Feed Repository | +| `/sap/bc/adt/feeds/variants` | Feed Variants |
@@ -729,11 +729,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------------------------- | -------------------------------------------------- | | `/sap/bc/adt/filestore/ui5-bsp/deploy-storage` | SAPUI5 Filestore Marker for Deploy storage support | -| `/sap/bc/adt/filestore/ui5-bsp/objects` | SAPUI5 Filestore based on BSP | -| `/sap/bc/adt/filestore/ui5-bsp/ui5-rt-version` | SAPUI5 Runtime Version | +| `/sap/bc/adt/filestore/ui5-bsp/objects` | SAPUI5 Filestore based on BSP | +| `/sap/bc/adt/filestore/ui5-bsp/ui5-rt-version` | SAPUI5 Runtime Version |
@@ -742,8 +742,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------- | ------------------------------- | | `/sap/bc/adt/fpm/creationtools` | FPM Applications Creation Tools |
@@ -753,9 +753,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/functions/groups` | Function Groups | +| Endpoint | Title | +| ---------------------------------- | ------------------------- | +| `/sap/bc/adt/functions/groups` | Function Groups | | `/sap/bc/adt/functions/validation` | Function Group Validation |
@@ -765,20 +765,20 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/hota/hotahdi` | Namespace in HDI container | -| `/sap/bc/adt/hota/hotahdi/hota/checknamespace` | | -| `/sap/bc/adt/hota/hotahdi/hota/checkout/hdiwizard` | | -| `/sap/bc/adt/hota/hotahdi/hota/containername` | | -| `/sap/bc/adt/hota/hotahdi/hota/featurecheck` | | -| `/sap/bc/adt/hota/hotahdi/hoto/addlprops` | | -| `/sap/bc/adt/hota/hotahdi/hoto/checkin` | | -| `/sap/bc/adt/hota/hotahdi/hoto/checkout` | | -| `/sap/bc/adt/hota/hotahdi/hoto/transportdetails` | | -| `/sap/bc/adt/hota/hotahdi/validation` | Namespace in HDI container Name Validation | -| `/sap/bc/adt/hota/hotahto` | HDI Artifact | -| `/sap/bc/adt/hota/hotahto/validation` | HDI Artifact Name Validation | +| Endpoint | Title | +| -------------------------------------------------- | ------------------------------------------ | +| `/sap/bc/adt/hota/hotahdi` | Namespace in HDI container | +| `/sap/bc/adt/hota/hotahdi/hota/checknamespace` | | +| `/sap/bc/adt/hota/hotahdi/hota/checkout/hdiwizard` | | +| `/sap/bc/adt/hota/hotahdi/hota/containername` | | +| `/sap/bc/adt/hota/hotahdi/hota/featurecheck` | | +| `/sap/bc/adt/hota/hotahdi/hoto/addlprops` | | +| `/sap/bc/adt/hota/hotahdi/hoto/checkin` | | +| `/sap/bc/adt/hota/hotahdi/hoto/checkout` | | +| `/sap/bc/adt/hota/hotahdi/hoto/transportdetails` | | +| `/sap/bc/adt/hota/hotahdi/validation` | Namespace in HDI container Name Validation | +| `/sap/bc/adt/hota/hotahto` | HDI Artifact | +| `/sap/bc/adt/hota/hotahto/validation` | HDI Artifact Name Validation |
@@ -787,8 +787,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------------- | ------------------ | | `/sap/bc/adt/includes/validation` | Include Validation |
@@ -798,11 +798,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/lifecycle_management/ftglaf` | Feature Toggle | +| Endpoint | Title | +| -------------------------------------------------------------- | --------------------------------------------------- | +| `/sap/bc/adt/lifecycle_management/ftglaf` | Feature Toggle | | `/sap/bc/adt/lifecycle_management/ftglaf/releasestatus/values` | Allowed values for Release Status of Feature Toggle | -| `/sap/bc/adt/lifecycle_management/ftglaf/validation` | Feature Toggle Name Validation | +| `/sap/bc/adt/lifecycle_management/ftglaf/validation` | Feature Toggle Name Validation |
@@ -811,9 +811,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/messageclass` | Message Classes | +| Endpoint | Title | +| ------------------------------------- | -------------------------------- | +| `/sap/bc/adt/messageclass` | Message Classes | | `/sap/bc/adt/messageclass/validation` | Validation of Message class Name |
@@ -823,10 +823,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------------ | ----------------- | | `/sap/bc/adt/navigation/indexupdate` | Navigation Update | -| `/sap/bc/adt/navigation/target` | Navigation | +| `/sap/bc/adt/navigation/target` | Navigation |
@@ -835,14 +835,14 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/nhi/dbprocedures` | Database Procedures for HANA-Integration | +| Endpoint | Title | +| ------------------------------------- | ----------------------------------------- | +| `/sap/bc/adt/nhi/dbprocedures` | Database Procedures for HANA-Integration | | `/sap/bc/adt/nhi/deliveryunitproxies` | Deliveryunit-Proxies for HANA-Integration | -| `/sap/bc/adt/nhi/deliveryunits` | Deliveryunits for HANA-Integration | -| `/sap/bc/adt/nhi/validation` | Validation for HANA-Integration | -| `/sap/bc/adt/nhi/vendors` | Vendors for HANA-Integration | -| `/sap/bc/adt/nhi/views` | Views for HANA-Integration | +| `/sap/bc/adt/nhi/deliveryunits` | Deliveryunits for HANA-Integration | +| `/sap/bc/adt/nhi/validation` | Validation for HANA-Integration | +| `/sap/bc/adt/nhi/vendors` | Vendors for HANA-Integration | +| `/sap/bc/adt/nhi/views` | Views for HANA-Integration |
@@ -851,13 +851,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/numberranges/objects` | Number Range Object | -| `/sap/bc/adt/numberranges/objects/$configuration` | JSON Configuration | -| `/sap/bc/adt/numberranges/objects/$schema` | JSON Schema | -| `/sap/bc/adt/numberranges/objects/source/formatter` | JSON Formatter | -| `/sap/bc/adt/numberranges/objects/validation` | Number Range Object Name Validation | +| Endpoint | Title | +| --------------------------------------------------- | ----------------------------------- | +| `/sap/bc/adt/numberranges/objects` | Number Range Object | +| `/sap/bc/adt/numberranges/objects/$configuration` | JSON Configuration | +| `/sap/bc/adt/numberranges/objects/$schema` | JSON Schema | +| `/sap/bc/adt/numberranges/objects/source/formatter` | JSON Formatter | +| `/sap/bc/adt/numberranges/objects/validation` | Number Range Object Name Validation |
@@ -866,10 +866,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/objectrelations/components` | Object relations | -| `/sap/bc/adt/objectrelations/network` | Object relations | +| Endpoint | Title | +| ---------------------------------------- | ----------------------------- | +| `/sap/bc/adt/objectrelations/components` | Object relations | +| `/sap/bc/adt/objectrelations/network` | Object relations | | `/sap/bc/adt/objectrelations/references` | References in Object Relation |
@@ -879,17 +879,17 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/objtype_admin/sval` | Repository Object Type | -| `/sap/bc/adt/objtype_admin/sval/assist/trscopes` | Available TR functional usage areas | +| Endpoint | Title | +| ------------------------------------------------- | ----------------------------------------------- | +| `/sap/bc/adt/objtype_admin/sval` | Repository Object Type | +| `/sap/bc/adt/objtype_admin/sval/assist/trscopes` | Available TR functional usage areas | | `/sap/bc/adt/objtype_admin/sval/assist/wbobjlist` | Available options for visibility in object list | -| `/sap/bc/adt/objtype_admin/sval/assist/wbscopes` | Available WB functional usage areas | -| `/sap/bc/adt/objtype_admin/sval/configurations` | Blue Tool Configurations | -| `/sap/bc/adt/objtype_admin/sval/metadata` | Blue Tool Configurations (Metadata) | -| `/sap/bc/adt/objtype_admin/sval/validation` | Repository Object Type Name Validation | -| `/sap/bc/adt/objtype_admin/wgrp` | Object Type Group | -| `/sap/bc/adt/objtype_admin/wgrp/validation` | Object Type Group Name Validation | +| `/sap/bc/adt/objtype_admin/sval/assist/wbscopes` | Available WB functional usage areas | +| `/sap/bc/adt/objtype_admin/sval/configurations` | Blue Tool Configurations | +| `/sap/bc/adt/objtype_admin/sval/metadata` | Blue Tool Configurations (Metadata) | +| `/sap/bc/adt/objtype_admin/sval/validation` | Repository Object Type Name Validation | +| `/sap/bc/adt/objtype_admin/wgrp` | Object Type Group | +| `/sap/bc/adt/objtype_admin/wgrp/validation` | Object Type Group Name Validation |
@@ -898,11 +898,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/oo/classes` | Classes | -| `/sap/bc/adt/oo/classrun` | Run a class | -| `/sap/bc/adt/oo/interfaces` | Interfaces | +| Endpoint | Title | +| -------------------------------------- | ------------------------- | +| `/sap/bc/adt/oo/classes` | Classes | +| `/sap/bc/adt/oo/classrun` | Run a class | +| `/sap/bc/adt/oo/interfaces` | Interfaces | | `/sap/bc/adt/oo/validation/objectname` | Validation of Object Name |
@@ -912,9 +912,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/other/gsmp` | Metric Provider | +| Endpoint | Title | +| ----------------------------------- | ------------------------------- | +| `/sap/bc/adt/other/gsmp` | Metric Provider | | `/sap/bc/adt/other/gsmp/validation` | Metric Provider Name Validation |
@@ -924,13 +924,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/predefinedfields/objects` | Predefined Field Enabling | -| `/sap/bc/adt/predefinedfields/objects/$configuration` | JSON Configuration | -| `/sap/bc/adt/predefinedfields/objects/$schema` | JSON Schema | -| `/sap/bc/adt/predefinedfields/objects/source/formatter` | JSON Formatter | -| `/sap/bc/adt/predefinedfields/objects/validation` | Predefined Field Enabling Name Validation | +| Endpoint | Title | +| ------------------------------------------------------- | ----------------------------------------- | +| `/sap/bc/adt/predefinedfields/objects` | Predefined Field Enabling | +| `/sap/bc/adt/predefinedfields/objects/$configuration` | JSON Configuration | +| `/sap/bc/adt/predefinedfields/objects/$schema` | JSON Schema | +| `/sap/bc/adt/predefinedfields/objects/source/formatter` | JSON Formatter | +| `/sap/bc/adt/predefinedfields/objects/validation` | Predefined Field Enabling Name Validation |
@@ -939,11 +939,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/programs/includes` | Includes | -| `/sap/bc/adt/programs/programrun` | Run a program | -| `/sap/bc/adt/programs/programs` | Programs | +| Endpoint | Title | +| --------------------------------- | ------------------ | +| `/sap/bc/adt/programs/includes` | Includes | +| `/sap/bc/adt/programs/programrun` | Run a program | +| `/sap/bc/adt/programs/programs` | Programs | | `/sap/bc/adt/programs/validation` | Program Validation |
@@ -953,8 +953,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------------------- | ---------- | | `/sap/bc/adt/quickfixes/evaluation` | Quickfixes |
@@ -964,8 +964,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------------------- | ------------------------- | | `/sap/bc/adt/refactoring/changepackage` | Change Package Assignment |
@@ -975,8 +975,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| -------------------------- | ----------- | | `/sap/bc/adt/refactorings` | Refactoring |
@@ -986,9 +986,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/reportdefinitions/srfr` | SRF Report Definition | +| Endpoint | Title | +| ----------------------------------------------- | ------------------------------------- | +| `/sap/bc/adt/reportdefinitions/srfr` | SRF Report Definition | | `/sap/bc/adt/reportdefinitions/srfr/validation` | SRF Report Definition Name Validation |
@@ -998,36 +998,36 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/repository/favorites/lists` | Object Favorites | -| `/sap/bc/adt/repository/generators` | Repository Objects Generators | -| `/sap/bc/adt/repository/informationsystem/abaplanguageversions` | ABAP Language Versions | +| Endpoint | Title | +| ---------------------------------------------------------------------- | -------------------------------------- | +| `/sap/bc/adt/repository/favorites/lists` | Object Favorites | +| `/sap/bc/adt/repository/generators` | Repository Objects Generators | +| `/sap/bc/adt/repository/informationsystem/abaplanguageversions` | ABAP Language Versions | | `/sap/bc/adt/repository/informationsystem/ci/forecast/rfcdestinations` | Integration Forecast: RFC Destinations | -| `/sap/bc/adt/repository/informationsystem/ci/forecast/run` | Integration Forecast | -| `/sap/bc/adt/repository/informationsystem/elementinfo` | Element Info | -| `/sap/bc/adt/repository/informationsystem/executableObjects` | Executable Objects | -| `/sap/bc/adt/repository/informationsystem/executableobjecttypes` | Executable Object Types | -| `/sap/bc/adt/repository/informationsystem/fullnamemapping` | Full Name Mapping | -| `/sap/bc/adt/repository/informationsystem/messagesearch` | Message Search | -| `/sap/bc/adt/repository/informationsystem/metadata` | Meta Data | -| `/sap/bc/adt/repository/informationsystem/objectproperties/transports` | Transport Properties | -| `/sap/bc/adt/repository/informationsystem/objectproperties/values` | Object Properties | -| `/sap/bc/adt/repository/informationsystem/objecttypes` | Object Types | -| `/sap/bc/adt/repository/informationsystem/properties/values` | Property Values | -| `/sap/bc/adt/repository/informationsystem/releasestates` | Release States | -| `/sap/bc/adt/repository/informationsystem/search` | Search | -| `/sap/bc/adt/repository/informationsystem/usageReferences` | Usage References | -| `/sap/bc/adt/repository/informationsystem/usageSnippets` | Usage Snippets | -| `/sap/bc/adt/repository/informationsystem/virtualfolders` | Virtual Folders | -| `/sap/bc/adt/repository/informationsystem/virtualfolders/contents` | Virtual Folders Contents | -| `/sap/bc/adt/repository/informationsystem/virtualfolders/facets` | Facets supported by Virtual Folders | -| `/sap/bc/adt/repository/informationsystem/whereused` | Where Used | -| `/sap/bc/adt/repository/nodepath` | Node Path | -| `/sap/bc/adt/repository/nodestructure` | Node Structure | -| `/sap/bc/adt/repository/objectstructure` | Object Structure | -| `/sap/bc/adt/repository/proxyurimappings` | Proxy URI Mappings | -| `/sap/bc/adt/repository/typestructure` | Type Structure | +| `/sap/bc/adt/repository/informationsystem/ci/forecast/run` | Integration Forecast | +| `/sap/bc/adt/repository/informationsystem/elementinfo` | Element Info | +| `/sap/bc/adt/repository/informationsystem/executableObjects` | Executable Objects | +| `/sap/bc/adt/repository/informationsystem/executableobjecttypes` | Executable Object Types | +| `/sap/bc/adt/repository/informationsystem/fullnamemapping` | Full Name Mapping | +| `/sap/bc/adt/repository/informationsystem/messagesearch` | Message Search | +| `/sap/bc/adt/repository/informationsystem/metadata` | Meta Data | +| `/sap/bc/adt/repository/informationsystem/objectproperties/transports` | Transport Properties | +| `/sap/bc/adt/repository/informationsystem/objectproperties/values` | Object Properties | +| `/sap/bc/adt/repository/informationsystem/objecttypes` | Object Types | +| `/sap/bc/adt/repository/informationsystem/properties/values` | Property Values | +| `/sap/bc/adt/repository/informationsystem/releasestates` | Release States | +| `/sap/bc/adt/repository/informationsystem/search` | Search | +| `/sap/bc/adt/repository/informationsystem/usageReferences` | Usage References | +| `/sap/bc/adt/repository/informationsystem/usageSnippets` | Usage Snippets | +| `/sap/bc/adt/repository/informationsystem/virtualfolders` | Virtual Folders | +| `/sap/bc/adt/repository/informationsystem/virtualfolders/contents` | Virtual Folders Contents | +| `/sap/bc/adt/repository/informationsystem/virtualfolders/facets` | Facets supported by Virtual Folders | +| `/sap/bc/adt/repository/informationsystem/whereused` | Where Used | +| `/sap/bc/adt/repository/nodepath` | Node Path | +| `/sap/bc/adt/repository/nodestructure` | Node Structure | +| `/sap/bc/adt/repository/objectstructure` | Object Structure | +| `/sap/bc/adt/repository/proxyurimappings` | Proxy URI Mappings | +| `/sap/bc/adt/repository/typestructure` | Type Structure |
@@ -1036,17 +1036,17 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/runtime/traces/abaptraces` | Trace files | -| `/sap/bc/adt/runtime/traces/abaptraces/objecttypes` | List of object types | -| `/sap/bc/adt/runtime/traces/abaptraces/parameters` | Trace parameters | -| `/sap/bc/adt/runtime/traces/abaptraces/parameters` | Trace parameters for callstack aggregation | -| `/sap/bc/adt/runtime/traces/abaptraces/parameters` | Trace parameters for amdp trace | -| `/sap/bc/adt/runtime/traces/abaptraces/processtypes` | List of process types | -| `/sap/bc/adt/runtime/traces/abaptraces/requests` | Trace requests | -| `/sap/bc/adt/runtime/traces/abaptraces/requests` | Trace requests with uri | -| `/sap/bc/adt/runtime/workprocesses` | Work Processes | +| Endpoint | Title | +| ---------------------------------------------------- | ------------------------------------------ | +| `/sap/bc/adt/runtime/traces/abaptraces` | Trace files | +| `/sap/bc/adt/runtime/traces/abaptraces/objecttypes` | List of object types | +| `/sap/bc/adt/runtime/traces/abaptraces/parameters` | Trace parameters | +| `/sap/bc/adt/runtime/traces/abaptraces/parameters` | Trace parameters for callstack aggregation | +| `/sap/bc/adt/runtime/traces/abaptraces/parameters` | Trace parameters for amdp trace | +| `/sap/bc/adt/runtime/traces/abaptraces/processtypes` | List of process types | +| `/sap/bc/adt/runtime/traces/abaptraces/requests` | Trace requests | +| `/sap/bc/adt/runtime/traces/abaptraces/requests` | Trace requests with uri | +| `/sap/bc/adt/runtime/workprocesses` | Work Processes |
@@ -1055,13 +1055,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/sadl/gw/annopush/finalize` | SADL: Annotation Pushdown Finalize | -| `/sap/bc/adt/sadl/gw/annopush/prepare` | SADL: Annotation Pushdown Prepare | -| `/sap/bc/adt/sadl/gw/annopush/push` | SADL: Annotation Pushdown Push | -| `/sap/bc/adt/sadl/gw/annopush/validate` | SADL: Annotation Pushdown Validate | -| `/sap/bc/adt/sadl/gw/mde` | SADL: Annotation Pushdown Metadata Extentions | +| Endpoint | Title | +| --------------------------------------- | --------------------------------------------- | +| `/sap/bc/adt/sadl/gw/annopush/finalize` | SADL: Annotation Pushdown Finalize | +| `/sap/bc/adt/sadl/gw/annopush/prepare` | SADL: Annotation Pushdown Prepare | +| `/sap/bc/adt/sadl/gw/annopush/push` | SADL: Annotation Pushdown Push | +| `/sap/bc/adt/sadl/gw/annopush/validate` | SADL: Annotation Pushdown Validate | +| `/sap/bc/adt/sadl/gw/mde` | SADL: Annotation Pushdown Metadata Extentions |
@@ -1070,9 +1070,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/schema_definitions/amsdtyp` | Logical Database Schema | +| Endpoint | Title | +| --------------------------------------------------- | --------------------------------------- | +| `/sap/bc/adt/schema_definitions/amsdtyp` | Logical Database Schema | | `/sap/bc/adt/schema_definitions/amsdtyp/validation` | Logical Database Schema Name Validation |
@@ -1082,8 +1082,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------------------- | ------------------------- | | `/sap/bc/adt/security/reentranceticket` | Security Reentranceticket |
@@ -1093,8 +1093,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------- | --------------- | | `/sap/bc/adt/sqlm/data` | SQLM Data Fetch |
@@ -1104,10 +1104,10 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------------- | ---------------------------- | | `/sap/bc/adt/st05/trace/directory` | Performance Trace Drirectory | -| `/sap/bc/adt/st05/trace/state` | Performance Trace State | +| `/sap/bc/adt/st05/trace/state` | Performance Trace State |
@@ -1116,13 +1116,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/system/clients` | Client | -| `/sap/bc/adt/system/components` | Installed Components | -| `/sap/bc/adt/system/information` | System Information | -| `/sap/bc/adt/system/landscape/servers` | System Landscape | -| `/sap/bc/adt/system/users` | User | +| Endpoint | Title | +| -------------------------------------- | -------------------- | +| `/sap/bc/adt/system/clients` | Client | +| `/sap/bc/adt/system/components` | Installed Components | +| `/sap/bc/adt/system/information` | System Information | +| `/sap/bc/adt/system/landscape/servers` | System Landscape | +| `/sap/bc/adt/system/users` | User |
@@ -1131,9 +1131,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/testcodegen/dependencies/doubledata` | Get DDL Dependency | +| Endpoint | Title | +| ------------------------------------------------- | ------------------------- | +| `/sap/bc/adt/testcodegen/dependencies/doubledata` | Get DDL Dependency | | `/sap/bc/adt/testcodegen/dependencies/doubledata` | Generate TestCode for CDS |
@@ -1143,11 +1143,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/textelements/classes` | Text Elements | +| Endpoint | Title | +| ----------------------------------------- | ------------- | +| `/sap/bc/adt/textelements/classes` | Text Elements | | `/sap/bc/adt/textelements/functiongroups` | Text Elements | -| `/sap/bc/adt/textelements/programs` | Text Elements | +| `/sap/bc/adt/textelements/programs` | Text Elements |
@@ -1156,25 +1156,25 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/uc_object_type_group/samc` | ABAP Messaging Channel | -| `/sap/bc/adt/uc_object_type_group/samc/activity/values` | AMC Activity | -| `/sap/bc/adt/uc_object_type_group/samc/messagetype/values` | AMC Message Type | -| `/sap/bc/adt/uc_object_type_group/samc/progtype/values` | AMC Program Type | -| `/sap/bc/adt/uc_object_type_group/samc/scope/values` | AMC Scope | -| `/sap/bc/adt/uc_object_type_group/samc/validation` | ABAP Messaging Channel Name Validation | -| `/sap/bc/adt/uc_object_type_group/samc/virusscan/values` | AMC Virus Scan Outgoing | -| `/sap/bc/adt/uc_object_type_group/sapc` | ABAP Push Channel Application | -| `/sap/bc/adt/uc_object_type_group/sapc/classproperties/values` | APC Superclass determination | -| `/sap/bc/adt/uc_object_type_group/sapc/connectiontypes/values` | APC Connection Type | -| `/sap/bc/adt/uc_object_type_group/sapc/protocoltypes/values` | APC Protocol Type | -| `/sap/bc/adt/uc_object_type_group/sapc/service_path/values` | Exist Service Pfad | -| `/sap/bc/adt/uc_object_type_group/sapc/superclass/values` | APC Superclass determination | -| `/sap/bc/adt/uc_object_type_group/sapc/testurl/values` | URL for Testscenario | -| `/sap/bc/adt/uc_object_type_group/sapc/validation` | ABAP Push Channel Application Name Validation | -| `/sap/bc/adt/uc_object_type_group/sapc/virusscanin/values` | APC Virus Scan Ingoing | -| `/sap/bc/adt/uc_object_type_group/sapc/virusscanout/values` | APC Virus Scan Outgoing | +| Endpoint | Title | +| -------------------------------------------------------------- | --------------------------------------------- | +| `/sap/bc/adt/uc_object_type_group/samc` | ABAP Messaging Channel | +| `/sap/bc/adt/uc_object_type_group/samc/activity/values` | AMC Activity | +| `/sap/bc/adt/uc_object_type_group/samc/messagetype/values` | AMC Message Type | +| `/sap/bc/adt/uc_object_type_group/samc/progtype/values` | AMC Program Type | +| `/sap/bc/adt/uc_object_type_group/samc/scope/values` | AMC Scope | +| `/sap/bc/adt/uc_object_type_group/samc/validation` | ABAP Messaging Channel Name Validation | +| `/sap/bc/adt/uc_object_type_group/samc/virusscan/values` | AMC Virus Scan Outgoing | +| `/sap/bc/adt/uc_object_type_group/sapc` | ABAP Push Channel Application | +| `/sap/bc/adt/uc_object_type_group/sapc/classproperties/values` | APC Superclass determination | +| `/sap/bc/adt/uc_object_type_group/sapc/connectiontypes/values` | APC Connection Type | +| `/sap/bc/adt/uc_object_type_group/sapc/protocoltypes/values` | APC Protocol Type | +| `/sap/bc/adt/uc_object_type_group/sapc/service_path/values` | Exist Service Pfad | +| `/sap/bc/adt/uc_object_type_group/sapc/superclass/values` | APC Superclass determination | +| `/sap/bc/adt/uc_object_type_group/sapc/testurl/values` | URL for Testscenario | +| `/sap/bc/adt/uc_object_type_group/sapc/validation` | ABAP Push Channel Application Name Validation | +| `/sap/bc/adt/uc_object_type_group/sapc/virusscanin/values` | APC Virus Scan Ingoing | +| `/sap/bc/adt/uc_object_type_group/sapc/virusscanout/values` | APC Virus Scan Outgoing |
@@ -1183,11 +1183,11 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/ucon/httpservices` | HTTP Service | -| `/sap/bc/adt/ucon/httpservices/HandlerClassesUri` | Handlerclasses search | -| `/sap/bc/adt/ucon/httpservices/validation` | Object Name Validation | +| Endpoint | Title | +| ------------------------------------------------- | ---------------------- | +| `/sap/bc/adt/ucon/httpservices` | HTTP Service | +| `/sap/bc/adt/ucon/httpservices/HandlerClassesUri` | Handlerclasses search | +| `/sap/bc/adt/ucon/httpservices/validation` | Object Name Validation |
@@ -1196,8 +1196,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------------- | ------------------------------- | | `/sap/bc/adt/ui_flex_dta_folder/` | Designtime adapation deployment |
@@ -1207,8 +1207,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------------- | ------------------- | | `/sap/bc/adt/urifragmentmappings` | URI Fragment Mapper |
@@ -1218,9 +1218,9 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/vit/urimapper` | VIT URI Mapper | +| Endpoint | Title | +| -------------------------------- | ----------------------- | +| `/sap/bc/adt/vit/urimapper` | VIT URI Mapper | | `/sap/bc/adt/vit/wb/object_type` | Basic Object Properties |
@@ -1230,13 +1230,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/wbobj/apictyp` | API Catalog | -| `/sap/bc/adt/wbobj/apictyp/$configuration` | JSON Configuration | -| `/sap/bc/adt/wbobj/apictyp/$schema` | JSON Schema | -| `/sap/bc/adt/wbobj/apictyp/source/formatter` | JSON Formatter | -| `/sap/bc/adt/wbobj/apictyp/validation` | API Catalog Name Validation | +| Endpoint | Title | +| -------------------------------------------- | --------------------------- | +| `/sap/bc/adt/wbobj/apictyp` | API Catalog | +| `/sap/bc/adt/wbobj/apictyp/$configuration` | JSON Configuration | +| `/sap/bc/adt/wbobj/apictyp/$schema` | JSON Schema | +| `/sap/bc/adt/wbobj/apictyp/source/formatter` | JSON Formatter | +| `/sap/bc/adt/wbobj/apictyp/validation` | API Catalog Name Validation |
@@ -1245,35 +1245,35 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/wdy/abapsource/codecompletion/elementinfo` | Webdynpro element information | -| `/sap/bc/adt/wdy/abapsource/codecompletion/insertion` | Webdynpro element insertion | -| `/sap/bc/adt/wdy/abapsource/codecompletion/proposal` | Webdynpro Code Completion | -| `/sap/bc/adt/wdy/abapsource/prettyprinter` | Webdynpro Pretty Printer | -| `/sap/bc/adt/wdy/applicationconfig` | Application Configuration | -| `/sap/bc/adt/wdy/applications` | WebDynpro Application | -| `/sap/bc/adt/wdy/codetemplate` | Code template | -| `/sap/bc/adt/wdy/componentconfig` | Web Dynpro Configuration | -| `/sap/bc/adt/wdy/componentcontrollers` | Component Controller | -| `/sap/bc/adt/wdy/componentinterfaces` | WebDynpro ComponentInterface | -| `/sap/bc/adt/wdy/components` | WebDynpro Component | -| `/sap/bc/adt/wdy/customcontrollers` | Custom Controller | -| `/sap/bc/adt/wdy/fpmadaptables` | FPM Adaptable Configuration | -| `/sap/bc/adt/wdy/fpmapplications` | FPM Application Configuration | -| `/sap/bc/adt/wdy/fpmcomponents` | FPM Layout Component Configuration | -| `/sap/bc/adt/wdy/fpmfloorplans` | FPM Flooplan Configuration | -| `/sap/bc/adt/wdy/fpmguibbs` | FPM Adaptable Configuration | -| `/sap/bc/adt/wdy/fpmruibbs` | FPM Adaptable Configuration | -| `/sap/bc/adt/wdy/interfacecontrollers` | Interface Controller | -| `/sap/bc/adt/wdy/interfaceviews` | WebDynpro Interface View | -| `/sap/bc/adt/wdy/interfaceviews` | Interface view Controller for a Component Interface | -| `/sap/bc/adt/wdy/launchconfiguration` | Web Dynpro Application launcher | -| `/sap/bc/adt/wdy/navigation/target` | Navigation controller | -| `/sap/bc/adt/wdy/search` | Search WDA Entities | -| `/sap/bc/adt/wdy/viewdesigner/uielementlibrary` | Webdynpro View UI Element Library | -| `/sap/bc/adt/wdy/views` | Webdynpro View | -| `/sap/bc/adt/wdy/windows` | Window Controller | +| Endpoint | Title | +| ------------------------------------------------------- | --------------------------------------------------- | +| `/sap/bc/adt/wdy/abapsource/codecompletion/elementinfo` | Webdynpro element information | +| `/sap/bc/adt/wdy/abapsource/codecompletion/insertion` | Webdynpro element insertion | +| `/sap/bc/adt/wdy/abapsource/codecompletion/proposal` | Webdynpro Code Completion | +| `/sap/bc/adt/wdy/abapsource/prettyprinter` | Webdynpro Pretty Printer | +| `/sap/bc/adt/wdy/applicationconfig` | Application Configuration | +| `/sap/bc/adt/wdy/applications` | WebDynpro Application | +| `/sap/bc/adt/wdy/codetemplate` | Code template | +| `/sap/bc/adt/wdy/componentconfig` | Web Dynpro Configuration | +| `/sap/bc/adt/wdy/componentcontrollers` | Component Controller | +| `/sap/bc/adt/wdy/componentinterfaces` | WebDynpro ComponentInterface | +| `/sap/bc/adt/wdy/components` | WebDynpro Component | +| `/sap/bc/adt/wdy/customcontrollers` | Custom Controller | +| `/sap/bc/adt/wdy/fpmadaptables` | FPM Adaptable Configuration | +| `/sap/bc/adt/wdy/fpmapplications` | FPM Application Configuration | +| `/sap/bc/adt/wdy/fpmcomponents` | FPM Layout Component Configuration | +| `/sap/bc/adt/wdy/fpmfloorplans` | FPM Flooplan Configuration | +| `/sap/bc/adt/wdy/fpmguibbs` | FPM Adaptable Configuration | +| `/sap/bc/adt/wdy/fpmruibbs` | FPM Adaptable Configuration | +| `/sap/bc/adt/wdy/interfacecontrollers` | Interface Controller | +| `/sap/bc/adt/wdy/interfaceviews` | WebDynpro Interface View | +| `/sap/bc/adt/wdy/interfaceviews` | Interface view Controller for a Component Interface | +| `/sap/bc/adt/wdy/launchconfiguration` | Web Dynpro Application launcher | +| `/sap/bc/adt/wdy/navigation/target` | Navigation controller | +| `/sap/bc/adt/wdy/search` | Search WDA Entities | +| `/sap/bc/adt/wdy/viewdesigner/uielementlibrary` | Webdynpro View UI Element Library | +| `/sap/bc/adt/wdy/views` | Webdynpro View | +| `/sap/bc/adt/wdy/windows` | Window Controller |
@@ -1282,13 +1282,13 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| -| `/sap/bc/adt/wmpc/applications` | WMPC Application | -| `/sap/bc/adt/wmpc/applications/$configuration` | JSON Configuration | -| `/sap/bc/adt/wmpc/applications/$schema` | JSON Schema | -| `/sap/bc/adt/wmpc/applications/source/formatter` | JSON Formatter | -| `/sap/bc/adt/wmpc/applications/validation` | WMPC Application Name Validation | +| Endpoint | Title | +| ------------------------------------------------ | -------------------------------- | +| `/sap/bc/adt/wmpc/applications` | WMPC Application | +| `/sap/bc/adt/wmpc/applications/$configuration` | JSON Configuration | +| `/sap/bc/adt/wmpc/applications/$schema` | JSON Schema | +| `/sap/bc/adt/wmpc/applications/source/formatter` | JSON Formatter | +| `/sap/bc/adt/wmpc/applications/validation` | WMPC Application Name Validation |
@@ -1297,8 +1297,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------------- | -------------- | | `/sap/bc/adt/xslt/transformations` | Transformation |
@@ -1308,8 +1308,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------- | ---------------- | | `/sap/bc/esproxy/activation` | Proxy Activation |
@@ -1319,8 +1319,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------------------- | ---------------- | | `/sap/bc/esproxy/consumerfactories` | Consumer Factory |
@@ -1330,8 +1330,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------------- | ---------------- | | `/sap/bc/esproxy/consumermappings` | Consumer Mapping |
@@ -1341,8 +1341,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------------------------- | ----------------------- | | `/sap/bc/esproxy/contractimplementations` | Contract Implementation |
@@ -1352,8 +1352,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------- | -------- | | `/sap/bc/esproxy/contracts` | Contract |
@@ -1363,8 +1363,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------- | --------------- | | `/sap/bc/esproxy/datatypes` | Proxy Data Type |
@@ -1374,8 +1374,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------ | -------------- | | `/sap/bc/esproxy/esrscv` | ESR SCV Search |
@@ -1385,8 +1385,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| --------------------------- | ------------------------------------- | | `/sap/bc/esproxy/esrsearch` | Enterprise Services Repository Search |
@@ -1396,8 +1396,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------------------ | ------------------------------- | | `/sap/bc/esproxy/integrationscenariodefns` | Integration Scenario Definition |
@@ -1407,8 +1407,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------ | ------------------ | | `/sap/bc/esproxy/messagetypes` | Proxy Message Type |
@@ -1418,8 +1418,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------------------- | ----------------- | | `/sap/bc/esproxy/operationmappings` | Operation Mapping |
@@ -1429,8 +1429,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------------- | ---------------------------- | | `/sap/bc/esproxy/proxysearch` | Proxy Specific Browse Search |
@@ -1440,8 +1440,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------------ | ------------ | | `/sap/bc/esproxy/rfcconsumers` | RFC Consumer |
@@ -1451,8 +1451,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ------------------------ | -------------------- | | `/sap/bc/esproxy/search` | Proxy Generic Search |
@@ -1462,8 +1462,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ----------------------------------- | ----------------- | | `/sap/bc/esproxy/semanticcontracts` | Semantic Contract |
@@ -1473,8 +1473,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------------- | ---------------- | | `/sap/bc/esproxy/serviceconsumers` | Service Consumer |
@@ -1484,8 +1484,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------------- | ---------------- | | `/sap/bc/esproxy/serviceproviders` | Service Provider |
@@ -1495,8 +1495,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| ---------------------------- | ----------- | | `/sap/bc/esproxy/soamanager` | SOA Manager |
@@ -1506,8 +1506,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| -------------------------- | ------------------------ | | `/sap/bc/esproxy/srsearch` | Services Registry Search |
@@ -1517,9 +1517,8 @@ These endpoints were discovered but no contracts are generated yet:
Click to expand -| Endpoint | Title | -|----------|-------| +| Endpoint | Title | +| -------------------------- | ------------------- | | `/sap/bc/esproxy/validate` | Validate Proxy Name |
- diff --git a/packages/adt-contracts/src/adt/atc/index.ts b/packages/adt-contracts/src/adt/atc/index.ts index 8338c39d..0631e3df 100644 --- a/packages/adt-contracts/src/adt/atc/index.ts +++ b/packages/adt-contracts/src/adt/atc/index.ts @@ -1,8 +1,8 @@ /** * ADT ATC (ABAP Test Cockpit) Contracts - * + * * Combines generated contracts with manually-defined endpoints not in discovery. - * + * * Structure mirrors URL tree: * - /sap/bc/adt/atc/customizing → atc.customizing (manual - not in discovery) * - /sap/bc/adt/atc/runs → atc.runs (manual - POST with body) @@ -20,7 +20,7 @@ export { resultsContract } from '../../generated/adt/sap/bc/adt/atc/results'; /** * /sap/bc/adt/atc/customizing * Get ATC customizing settings (check variants, exemption reasons, etc.) - * + * * NOTE: Not in SAP discovery - manually defined */ const customizing = contract({ @@ -36,7 +36,7 @@ const customizing = contract({ /** * /sap/bc/adt/atc/runs - * + * * NOTE: POST endpoint with body - not in SAP discovery * @source atcruns.json */ @@ -50,7 +50,7 @@ const runs = contract({ query: params, body: atcRun, responses: { 200: atcworklist }, - headers: { + headers: { Accept: 'application/xml', 'Content-Type': 'application/xml', }, @@ -59,14 +59,14 @@ const runs = contract({ /** * /sap/bc/adt/atc/worklists - Extended - * + * * Adds POST (create) endpoint not in generated contract */ const worklistsExtended = contract({ /** * POST /sap/bc/adt/atc/worklists{?checkVariant} * Create a new ATC worklist - * + * * NOTE: Not in SAP discovery - manually defined */ create: (params?: { checkVariant?: string }) => @@ -83,7 +83,7 @@ import { resultsContract } from '../../generated/adt/sap/bc/adt/atc/results'; /** * Combined ATC contract - * + * * Uses generated contracts where available, adds manual endpoints for: * - customizing (not in discovery) * - runs POST (not in discovery) diff --git a/packages/adt-contracts/src/adt/core/http/systeminformation.ts b/packages/adt-contracts/src/adt/core/http/systeminformation.ts index b8ead555..68163886 100644 --- a/packages/adt-contracts/src/adt/core/http/systeminformation.ts +++ b/packages/adt-contracts/src/adt/core/http/systeminformation.ts @@ -8,7 +8,9 @@ import { http } from '../../../base'; import { systeminformationSchema } from '../../../schemas'; -export const systeminformationContract = { +export const systeminformationContract: { + getSystemInfo: () => ReturnType; +} = { /** * Get system information * diff --git a/packages/adt-contracts/src/adt/oo/classes.ts b/packages/adt-contracts/src/adt/oo/classes.ts index 5ca07a6d..1d17ab7e 100644 --- a/packages/adt-contracts/src/adt/oo/classes.ts +++ b/packages/adt-contracts/src/adt/oo/classes.ts @@ -3,7 +3,7 @@ * * Endpoint: /sap/bc/adt/oo/classes * Full CRUD operations for ABAP classes including source code management. - * + * * Uses the crud() helper with sources and includes options for complete * class operations including metadata, source code, and class includes. */ @@ -15,7 +15,13 @@ import { classes as classesSchema, type InferTypedSchema } from '../../schemas'; * Include types for ABAP classes * Based on AbapClassIncludeType from SAP XSD schema */ -export type ClassIncludeType = 'main' | 'definitions' | 'implementations' | 'macros' | 'testclasses' | 'localtypes'; +export type ClassIncludeType = + | 'main' + | 'definitions' + | 'implementations' + | 'macros' + | 'testclasses' + | 'localtypes'; /** * Class response type - exported for consumers (ADK, etc.) @@ -28,7 +34,7 @@ export type ClassResponse = InferTypedSchema; /** * /sap/bc/adt/oo/classes * Full CRUD operations for ABAP classes - * + * * Includes: * - Basic CRUD: get, post, put, delete * - Lock/Unlock: lock, unlock @@ -41,7 +47,13 @@ export const classesContract = crud({ schema: classesSchema, contentType: 'application/vnd.sap.adt.oo.classes.v4+xml', sources: ['main'] as const, - includes: ['definitions', 'implementations', 'macros', 'testclasses', 'localtypes'] as const, + includes: [ + 'definitions', + 'implementations', + 'macros', + 'testclasses', + 'localtypes', + ] as const, }); /** Type alias for the classes contract */ diff --git a/packages/adt-contracts/src/adt/oo/interfaces.ts b/packages/adt-contracts/src/adt/oo/interfaces.ts index c766d251..954a9c45 100644 --- a/packages/adt-contracts/src/adt/oo/interfaces.ts +++ b/packages/adt-contracts/src/adt/oo/interfaces.ts @@ -3,7 +3,7 @@ * * Endpoint: /sap/bc/adt/oo/interfaces * Full CRUD operations for ABAP interfaces including source code management. - * + * * Uses the crud() helper with sources option for complete * interface operations including metadata and source code. */ @@ -25,7 +25,7 @@ export type InterfaceResponse = InferTypedSchema; /** * /sap/bc/adt/oo/interfaces * Full CRUD operations for ABAP interfaces - * + * * Includes: * - Basic CRUD: get, post, put, delete * - Lock/Unlock: lock, unlock diff --git a/packages/adt-contracts/src/base.ts b/packages/adt-contracts/src/base.ts index 8cb06f14..943d4901 100644 --- a/packages/adt-contracts/src/base.ts +++ b/packages/adt-contracts/src/base.ts @@ -1,12 +1,12 @@ /** * Base contract utilities - * + * * Re-exports speci utilities for contract definitions and client creation. - * + * * This module serves as the abstraction boundary - consumers (like adt-client) * should import from here, not directly from speci. This allows swapping the * underlying implementation (e.g., speci → ts-rest) without impacting consumers. - * + * * Schemas from ./schemas are already speci-compatible * (they have parse/build methods), so no wrapping is needed. */ @@ -17,10 +17,10 @@ export { http, type RestContract } from 'speci/rest'; // CRUD helper for repository objects // Note: SourceType and IncludeType were removed - crud() now accepts generic strings // and callers define valid values based on SAP XSD schema for each object type -export { - crud, - repo, - type CrudOptions, +export { + crud, + repo, + type CrudOptions, type CrudContract, type CrudContractBase, type CrudQueryParams, @@ -34,24 +34,28 @@ export { } from './helpers/crud'; // Client creation utilities (for consumers like adt-client) -import { createClient as speciCreateClient, type HttpAdapter } from 'speci/rest'; +import { + createClient as speciCreateClient, + type HttpAdapter, +} from 'speci/rest'; // Import contract and type for client creation import { adtContract, type AdtContract } from './adt'; /** * Create a typed ADT REST client. - * + * * Contract is already known - just pass adapter options. */ -export function createAdtClient( - options: { baseUrl: string; adapter: HttpAdapter } -): RestClient { +export function createAdtClient(options: { + baseUrl: string; + adapter: HttpAdapter; +}): RestClient { return speciCreateClient(adtContract, options); } // Types needed by HTTP adapter implementations -export type { +export type { HttpAdapter, HttpRequestOptions, RestClient, @@ -60,25 +64,22 @@ export type { } from 'speci/rest'; // Type utilities for extracting types from contracts -export type { - ExtractResponse, - InferSuccessResponse, -} from 'speci/rest'; +export type { ExtractResponse, InferSuccessResponse } from 'speci/rest'; // Import RestClient for use in return type import type { RestClient } from 'speci/rest'; /** * Identity function for contract definitions. - * + * * Schemas from ./schemas are already speci-compatible, * so this is just a pass-through for type safety and documentation. - * + * * @example * ```ts * import { configurations } from './schemas'; * import { contract, http } from '../base'; - * + * * export const myContract = contract({ * get: () => http.get('/endpoint', { * responses: { 200: configurations }, diff --git a/packages/adt-contracts/src/generated/adt/index.ts b/packages/adt-contracts/src/generated/adt/index.ts index a4e7b274..a00fd0cb 100644 --- a/packages/adt-contracts/src/generated/adt/index.ts +++ b/packages/adt-contracts/src/generated/adt/index.ts @@ -1,9 +1,9 @@ /** * Generated ADT Contracts Index - * + * * Only includes enabled endpoints from config/enabled-endpoints.json * See docs/adt-endpoints.md for available but not-yet-enabled endpoints. - * + * * @generated - DO NOT EDIT MANUALLY */ @@ -27,4 +27,3 @@ export { metadataContract } from './sap/bc/adt/cts/transportrequests/searchconfi // sap/bc/adt/packages export { settingsContract } from './sap/bc/adt/packages/settings'; export { validationContract } from './sap/bc/adt/packages/validation'; - diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/results.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/results.ts index 221c4a04..cfb55f1c 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/results.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/results.ts @@ -1,9 +1,9 @@ /** * ATC results - * + * * Endpoint: /sap/bc/adt/atc/results * Category: atcresults - * + * * @generated - DO NOT EDIT MANUALLY */ @@ -23,7 +23,11 @@ export const resultsContract = contract({ /** * GET ATC results */ - activeforsysid: (params?: { activeResult?: string; contactPerson?: string; sysId?: string }) => + activeforsysid: (params?: { + activeResult?: string; + contactPerson?: string; + sysId?: string; + }) => http.get('/sap/bc/adt/atc/results', { query: params, responses: { 200: atcworklist }, @@ -32,7 +36,12 @@ export const resultsContract = contract({ /** * GET ATC results */ - user: (params?: { createdBy?: string; ageMin?: string; ageMax?: string; contactPerson?: string }) => + user: (params?: { + createdBy?: string; + ageMin?: string; + ageMax?: string; + contactPerson?: string; + }) => http.get('/sap/bc/adt/atc/results', { query: params, responses: { 200: atcworklist }, @@ -41,7 +50,13 @@ export const resultsContract = contract({ /** * GET ATC results */ - central: (params?: { centralResult?: string; createdBy?: string; contactPerson?: string; ageMin?: string; ageMax?: string }) => + central: (params?: { + centralResult?: string; + createdBy?: string; + contactPerson?: string; + ageMin?: string; + ageMax?: string; + }) => http.get('/sap/bc/adt/atc/results', { query: params, responses: { 200: atcworklist }, @@ -50,7 +65,14 @@ export const resultsContract = contract({ /** * GET ATC results */ - centralforsysid: (params?: { centralResult?: string; createdBy?: string; contactPerson?: string; ageMin?: string; ageMax?: string; sysId?: string }) => + centralforsysid: (params?: { + centralResult?: string; + createdBy?: string; + contactPerson?: string; + ageMin?: string; + ageMax?: string; + sysId?: string; + }) => http.get('/sap/bc/adt/atc/results', { query: params, responses: { 200: atcworklist }, @@ -59,7 +81,14 @@ export const resultsContract = contract({ /** * GET ATC results */ - displayid: (displayId: string, params?: { activeResult?: string; contactPerson?: string; includeExemptedFindings?: string }) => + displayid: ( + displayId: string, + params?: { + activeResult?: string; + contactPerson?: string; + includeExemptedFindings?: string; + }, + ) => http.get(`/sap/bc/adt/atc/results/${displayId}`, { query: params, responses: { 200: atcworklist }, diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/worklists.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/worklists.ts index c56d5e2c..4b51bef8 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/worklists.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/atc/worklists.ts @@ -1,9 +1,9 @@ /** * ATC worklist - * + * * Endpoint: /sap/bc/adt/atc/worklists * Category: atcworklists - * + * * @generated - DO NOT EDIT MANUALLY */ @@ -14,7 +14,14 @@ export const worklistsContract = contract({ /** * GET ATC worklist */ - get: (worklistId: string, params?: { timestamp?: string; usedObjectSet?: string; includeExemptedFindings?: string }) => + get: ( + worklistId: string, + params?: { + timestamp?: string; + usedObjectSet?: string; + includeExemptedFindings?: string; + }, + ) => http.get(`/sap/bc/adt/atc/worklists/${worklistId}`, { query: params, responses: { 200: atcworklist }, @@ -23,7 +30,11 @@ export const worklistsContract = contract({ /** * GET ATC worklist */ - objectset: (worklistId: string, objectSetName: string, params?: { timestamp?: string; includeExemptedFindings?: string }) => + objectset: ( + worklistId: string, + objectSetName: string, + params?: { timestamp?: string; includeExemptedFindings?: string }, + ) => http.get(`/sap/bc/adt/atc/worklists/${worklistId}/${objectSetName}`, { query: params, responses: { 200: atcworklist }, diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests.ts index 7e46b082..1a34a13a 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests.ts @@ -1,9 +1,9 @@ /** * Transport Management - * + * * Endpoint: /sap/bc/adt/cts/transportrequests * Category: transportmanagement - * + * * @generated - DO NOT EDIT MANUALLY */ @@ -51,11 +51,16 @@ export const transportrequestsContract = contract({ * GET Transport Management */ object: (field: string, name: string, params?: { maxItemCount?: string }) => - http.get(`/sap/bc/adt/cts/transportrequests/valuehelp/object/${field}${name}`, { - query: params, - responses: { 200: transportmanagment }, - headers: { Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml' }, - }), + http.get( + `/sap/bc/adt/cts/transportrequests/valuehelp/object/${field}${name}`, + { + query: params, + responses: { 200: transportmanagment }, + headers: { + Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml', + }, + }, + ), }); export type TransportrequestsContract = typeof transportrequestsContract; diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/reference.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/reference.ts index 04d65cf5..ac628671 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/reference.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/reference.ts @@ -1,9 +1,9 @@ /** * Transport Management - * + * * Endpoint: /sap/bc/adt/cts/transportrequests/reference * Category: transportmanagementref - * + * * @generated - DO NOT EDIT MANUALLY */ diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations.ts index a3bb0d89..2024f824 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations.ts @@ -1,9 +1,9 @@ /** * Transport Search Configurations - * + * * Endpoint: /sap/bc/adt/cts/transportrequests/searchconfiguration/configurations * Category: transportconfigurations - * + * * @generated - DO NOT EDIT MANUALLY */ @@ -15,10 +15,13 @@ export const configurationsContract = contract({ * GET Transport Search Configurations */ get: () => - http.get('/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations', { - responses: { 200: transportmanagment }, - headers: { Accept: 'application/xml' }, - }), + http.get( + '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations', + { + responses: { 200: transportmanagment }, + headers: { Accept: 'application/xml' }, + }, + ), }); export type ConfigurationsContract = typeof configurationsContract; diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata.ts index 3edb46c9..b0194495 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata.ts @@ -1,9 +1,9 @@ /** * Transport Search Configurations (Metadata) - * + * * Endpoint: /sap/bc/adt/cts/transportrequests/searchconfiguration/metadata * Category: transportconfigurationsmetadata - * + * * @generated - DO NOT EDIT MANUALLY */ diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages.ts index 878d063e..c17d899f 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages.ts @@ -1,9 +1,9 @@ /** * Package - * + * * Endpoint: /sap/bc/adt/packages * Category: devck - * + * * @generated - DO NOT EDIT MANUALLY */ @@ -14,7 +14,16 @@ export const packagesContract = contract({ /** * GET Package */ - properties: (object_name: string, params?: { corrNr?: string; lockHandle?: string; version?: string; accessMode?: string; _action?: string }) => + properties: ( + object_name: string, + params?: { + corrNr?: string; + lockHandle?: string; + version?: string; + accessMode?: string; + _action?: string; + }, + ) => http.get(`/sap/bc/adt/packages/${object_name}`, { query: params, responses: { 200: packagesV1 }, @@ -24,10 +33,13 @@ export const packagesContract = contract({ * GET Package */ checkuseaccess: (packagename: string, packageinterfacename: string) => - http.get(`/sap/bc/adt/packages/${packagename}/useaccesses/${packageinterfacename}`, { - responses: { 200: packagesV1 }, - headers: { Accept: 'application/vnd.sap.adt.packages.v2+xml' }, - }), + http.get( + `/sap/bc/adt/packages/${packagename}/useaccesses/${packageinterfacename}`, + { + responses: { 200: packagesV1 }, + headers: { Accept: 'application/vnd.sap.adt.packages.v2+xml' }, + }, + ), /** * GET Package */ diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/settings.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/settings.ts index ffc74629..28007781 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/settings.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/settings.ts @@ -1,9 +1,9 @@ /** * Package Settings - * + * * Endpoint: /sap/bc/adt/packages/settings * Category: settings - * + * * @generated - DO NOT EDIT MANUALLY */ diff --git a/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/validation.ts b/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/validation.ts index 60439032..aee46eda 100644 --- a/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/validation.ts +++ b/packages/adt-contracts/src/generated/adt/sap/bc/adt/packages/validation.ts @@ -1,9 +1,9 @@ /** * Package Name Validation - * + * * Endpoint: /sap/bc/adt/packages/validation * Category: devck/validation - * + * * @generated - DO NOT EDIT MANUALLY */ diff --git a/packages/adt-contracts/src/generated/schemas.ts b/packages/adt-contracts/src/generated/schemas.ts index ff717972..09f15c5f 100644 --- a/packages/adt-contracts/src/generated/schemas.ts +++ b/packages/adt-contracts/src/generated/schemas.ts @@ -1,6 +1,6 @@ /** * Generated schema exports - * + * * THIS FILE IS AUTO-GENERATED - DO NOT EDIT MANUALLY * Run: npx tsx scripts/generate-schemas.ts */ @@ -38,15 +38,24 @@ export const logpoint = toSpeciSchema(adtSchemas.logpoint); export const packagesV1 = toSpeciSchema(adtSchemas.packagesV1); export const quickfixes = toSpeciSchema(adtSchemas.quickfixes); export const templatelink = toSpeciSchema(adtSchemas.templatelink); -export const templatelinkExtended = toSpeciSchema(adtSchemas.templatelinkExtended); +export const templatelinkExtended = toSpeciSchema( + adtSchemas.templatelinkExtended, +); export const traces = toSpeciSchema(adtSchemas.traces); export const transportfind = toSpeciSchema(adtSchemas.transportfind); export const transportmanagment = toSpeciSchema(adtSchemas.transportmanagment); -export const transportmanagmentCreate = toSpeciSchema(adtSchemas.transportmanagmentCreate); -export const transportmanagmentSingle = toSpeciSchema(adtSchemas.transportmanagmentSingle); +export const transportmanagmentCreate = toSpeciSchema( + adtSchemas.transportmanagmentCreate, +); +export const transportmanagmentSingle = toSpeciSchema( + adtSchemas.transportmanagmentSingle, +); export const transportsearch = toSpeciSchema(adtSchemas.transportsearch); // ============================================================================ // JSON Schemas (re-exported directly - they use zod, not ts-xsd) // ============================================================================ -export { systeminformation, systeminformationSchema } from '@abapify/adt-schemas'; +export { + systeminformation, + systeminformationSchema, +} from '@abapify/adt-schemas'; diff --git a/packages/adt-contracts/src/helpers/crud.ts b/packages/adt-contracts/src/helpers/crud.ts index 07199770..64badc8c 100644 --- a/packages/adt-contracts/src/helpers/crud.ts +++ b/packages/adt-contracts/src/helpers/crud.ts @@ -1,22 +1,22 @@ /** * CRUD Contract Helper - * + * * Generates full CRUD contracts for ADT repository objects following the * standard SAP ADT URL template pattern: - * + * * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action} - * + * * @example * ```ts * import { crud } from '../helpers/crud'; * import { classes } from '../schemas'; - * + * * export const classesContract = crud({ * basePath: '/sap/bc/adt/oo/classes', * schema: classes, * contentType: 'application/vnd.sap.adt.oo.classes.v4+xml', * }); - * + * * // Usage: * // classesContract.get('zcl_my_class') * // classesContract.post({ corrNr: 'DEVK900001' }) @@ -63,7 +63,10 @@ export interface SourcePutOptions { */ export interface SourceContract { get: (name: string) => ReturnType; - put: (name: string, options?: SourcePutOptions) => ReturnType; + put: ( + name: string, + options?: SourcePutOptions, + ) => ReturnType; } /** @@ -117,25 +120,42 @@ export interface ObjectStructureOptions { */ export interface CrudContractBase> { /** GET {basePath}/{name} - Retrieve object metadata */ - get: (name: string, options?: Pick) => ReturnType; - + get: ( + name: string, + options?: Pick, + ) => ReturnType; + /** POST {basePath} - Create new object */ - post: (options?: Pick) => ReturnType; - + post: ( + options?: Pick, + ) => ReturnType; + /** PUT {basePath}/{name} - Update object */ - put: (name: string, options?: Pick) => ReturnType; - + put: ( + name: string, + options?: Pick, + ) => ReturnType; + /** DELETE {basePath}/{name} - Delete object */ - delete: (name: string, options?: Pick) => ReturnType; - + delete: ( + name: string, + options?: Pick, + ) => ReturnType; + /** POST {basePath}/{name}?_action=LOCK - Lock object for modification */ lock: (name: string, options?: LockOptions) => ReturnType; - + /** POST {basePath}/{name}?_action=UNLOCK - Unlock object */ - unlock: (name: string, options: UnlockOptions) => ReturnType; - + unlock: ( + name: string, + options: UnlockOptions, + ) => ReturnType; + /** GET {basePath}/{name}/objectstructure - Get object structure (includes, methods, etc.) */ - objectstructure: (name: string, options?: ObjectStructureOptions) => ReturnType; + objectstructure: ( + name: string, + options?: ObjectStructureOptions, + ) => ReturnType; } /** @@ -143,7 +163,10 @@ export interface CrudContractBase> { */ export interface SourceOperations { get: (name: string) => ReturnType; - put: (name: string, options?: SourcePutOptions) => ReturnType; + put: ( + name: string, + options?: SourcePutOptions, + ) => ReturnType; } /** @@ -160,8 +183,15 @@ export type SourcesContract = { */ export type IncludesContract = { /** Generic get/put for any include type */ - get: (name: string, includeType: Includes[number]) => ReturnType; - put: (name: string, includeType: Includes[number], options?: SourcePutOptions) => ReturnType; + get: ( + name: string, + includeType: Includes[number], + ) => ReturnType; + put: ( + name: string, + includeType: Includes[number], + options?: SourcePutOptions, + ) => ReturnType; } & { /** Shorthand accessors for specific includes */ [K in Includes[number]]: SourceOperations; @@ -173,10 +203,14 @@ export type IncludesContract = { export type CrudContract< S extends Serializable, Sources extends readonly string[] | undefined = undefined, - Includes extends readonly string[] | undefined = undefined -> = CrudContractBase - & (Sources extends readonly string[] ? { source: SourcesContract } : object) - & (Includes extends readonly string[] ? { includes: IncludesContract } : object); + Includes extends readonly string[] | undefined = undefined, +> = CrudContractBase & + (Sources extends readonly string[] + ? { source: SourcesContract } + : object) & + (Includes extends readonly string[] + ? { includes: IncludesContract } + : object); /** * Create source operations for a given source type @@ -184,7 +218,7 @@ export type CrudContract< function createSourceOperations( basePath: string, sourceType: string, - nameTransform: (n: string) => string + nameTransform: (n: string) => string, ): SourceOperations { return { get: (name: string) => @@ -211,7 +245,7 @@ function createSourceOperations( function createIncludeOperations( basePath: string, includeType: string, - nameTransform: (n: string) => string + nameTransform: (n: string) => string, ): SourceOperations { return { get: (name: string) => @@ -234,10 +268,10 @@ function createIncludeOperations( /** * Create a full CRUD contract for an ADT repository object - * + * * Follows the standard SAP ADT URL template pattern: * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action} - * + * * @example Basic CRUD * ```ts * const packagesContract = crud({ @@ -246,7 +280,7 @@ function createIncludeOperations( * contentType: 'application/vnd.sap.adt.packages.v1+xml', * }); * ``` - * + * * @example With source code support * ```ts * const interfacesContract = crud({ @@ -257,7 +291,7 @@ function createIncludeOperations( * }); * // interfacesContract.source.main.get('zif_my_interface') * ``` - * + * * @example With includes support (classes) * ```ts * const classesContract = crud({ @@ -275,12 +309,19 @@ function createIncludeOperations( export function crud< S extends Serializable, const Sources extends readonly string[] | undefined = undefined, - const Includes extends readonly string[] | undefined = undefined + const Includes extends readonly string[] | undefined = undefined, >( - options: CrudOptions & { sources?: Sources; includes?: Includes } + options: CrudOptions & { sources?: Sources; includes?: Includes }, ): CrudContract { - const { basePath, schema, contentType, nameTransform = (n) => n.toLowerCase(), sources, includes } = options; - + const { + basePath, + schema, + contentType, + nameTransform = (n) => n.toLowerCase(), + sources, + includes, + } = options; + return { /** * GET {basePath}/{name} @@ -290,7 +331,9 @@ export function crud< http.get(`${basePath}/${nameTransform(name)}`, { responses: { 200: schema }, headers: { Accept: contentType }, - query: queryOptions?.version ? { version: queryOptions.version } : undefined, + query: queryOptions?.version + ? { version: queryOptions.version } + : undefined, }), /** @@ -305,14 +348,19 @@ export function crud< Accept: contentType, 'Content-Type': contentType, }, - query: queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : undefined, + query: queryOptions?.corrNr + ? { corrNr: queryOptions.corrNr } + : undefined, }), /** * PUT {basePath}/{name} * Update object metadata */ - put: (name: string, queryOptions?: Pick) => + put: ( + name: string, + queryOptions?: Pick, + ) => http.put(`${basePath}/${nameTransform(name)}`, { body: schema, responses: { 200: schema }, @@ -322,7 +370,9 @@ export function crud< }, query: { ...(queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : {}), - ...(queryOptions?.lockHandle ? { lockHandle: queryOptions.lockHandle } : {}), + ...(queryOptions?.lockHandle + ? { lockHandle: queryOptions.lockHandle } + : {}), }, }), @@ -330,26 +380,31 @@ export function crud< * DELETE {basePath}/{name} * Delete object */ - delete: (name: string, queryOptions?: Pick) => + delete: ( + name: string, + queryOptions?: Pick, + ) => http.delete(`${basePath}/${nameTransform(name)}`, { responses: { 204: undefined }, query: { ...(queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : {}), - ...(queryOptions?.lockHandle ? { lockHandle: queryOptions.lockHandle } : {}), + ...(queryOptions?.lockHandle + ? { lockHandle: queryOptions.lockHandle } + : {}), }, }), /** * POST {basePath}/{name}?_action=LOCK * Lock object for modification - * + * * Response contains lock handle in XML format: * ...xxxyyy...... */ lock: (name: string, lockOptions?: LockOptions) => http.post(`${basePath}/${nameTransform(name)}`, { responses: { 200: undefined }, - headers: { + headers: { 'X-sap-adt-sessiontype': 'stateful', }, query: { @@ -376,61 +431,89 @@ export function crud< * GET {basePath}/{name}/objectstructure * Get object structure (includes, methods, attributes, etc.) */ - objectstructure: (name: string, structureOptions?: ObjectStructureOptions) => + objectstructure: ( + name: string, + structureOptions?: ObjectStructureOptions, + ) => http.get(`${basePath}/${nameTransform(name)}/objectstructure`, { responses: { 200: undefined }, query: { - ...(structureOptions?.version ? { version: structureOptions.version } : {}), - ...(structureOptions?.withShortDescriptions !== undefined - ? { withShortDescriptions: String(structureOptions.withShortDescriptions) } + ...(structureOptions?.version + ? { version: structureOptions.version } + : {}), + ...(structureOptions?.withShortDescriptions !== undefined + ? { + withShortDescriptions: String( + structureOptions.withShortDescriptions, + ), + } : {}), }, }), - + // Conditionally add source operations - ...(sources ? { - source: Object.fromEntries( - sources.map(sourceType => [ - sourceType, - createSourceOperations(basePath, sourceType, nameTransform) - ]) - ), - } : {}), - + ...(sources + ? { + source: Object.fromEntries( + sources.map((sourceType) => [ + sourceType, + createSourceOperations(basePath, sourceType, nameTransform), + ]), + ), + } + : {}), + // Conditionally add includes operations - ...(includes ? { - includes: { - // Generic get/put for any include type - get: (name: string, includeType: string) => - http.get(`${basePath}/${nameTransform(name)}/includes/${includeType}`, { - responses: { 200: undefined as unknown as string }, - headers: { Accept: 'text/plain' }, - }), - put: (name: string, includeType: string, options?: SourcePutOptions) => - http.put(`${basePath}/${nameTransform(name)}/includes/${includeType}`, { - body: undefined as unknown as string, - responses: { 200: undefined as unknown as string }, - headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' }, - query: { - ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}), - ...(options?.corrNr ? { corrNr: options.corrNr } : {}), - }, - }), - // Shorthand accessors for each include type - ...Object.fromEntries( - includes.map(includeType => [ - includeType, - createIncludeOperations(basePath, includeType, nameTransform) - ]) - ), - }, - } : {}), + ...(includes + ? { + includes: { + // Generic get/put for any include type + get: (name: string, includeType: string) => + http.get( + `${basePath}/${nameTransform(name)}/includes/${includeType}`, + { + responses: { 200: undefined as unknown as string }, + headers: { Accept: 'text/plain' }, + }, + ), + put: ( + name: string, + includeType: string, + options?: SourcePutOptions, + ) => + http.put( + `${basePath}/${nameTransform(name)}/includes/${includeType}`, + { + body: undefined as unknown as string, + responses: { 200: undefined as unknown as string }, + headers: { + Accept: 'text/plain', + 'Content-Type': 'text/plain', + }, + query: { + ...(options?.lockHandle + ? { lockHandle: options.lockHandle } + : {}), + ...(options?.corrNr ? { corrNr: options.corrNr } : {}), + }, + }, + ), + // Shorthand accessors for each include type + ...Object.fromEntries( + includes.map((includeType) => [ + includeType, + createIncludeOperations(basePath, includeType, nameTransform), + ]), + ), + }, + } + : {}), } as CrudContract; } /** * Shorthand alias for crud() - * + * * @example * ```ts * export const classesContract = repo('/sap/bc/adt/oo/classes', classes, 'application/vnd.sap.adt.oo.classes.v4+xml'); @@ -440,7 +523,7 @@ export function repo>( basePath: string, schema: S, contentType: string, - nameTransform?: (name: string) => string + nameTransform?: (name: string) => string, ): CrudContract { return crud({ basePath, schema, contentType, nameTransform }); } diff --git a/packages/adt-contracts/src/helpers/speci-schema.ts b/packages/adt-contracts/src/helpers/speci-schema.ts index f81c2c23..1790b8c1 100644 --- a/packages/adt-contracts/src/helpers/speci-schema.ts +++ b/packages/adt-contracts/src/helpers/speci-schema.ts @@ -1,11 +1,15 @@ /** * Speci schema helpers - * + * * Provides utilities to convert ts-xsd TypedSchema to speci-compatible schemas. * This is the bridge between ts-xsd and speci libraries. */ -import type { TypedSchema, InferTypedSchema, SchemaLike } from '@abapify/adt-schemas'; +import type { + TypedSchema, + InferTypedSchema, + SchemaLike, +} from '@abapify/adt-schemas'; import type { Serializable } from 'speci/rest'; // Re-export types for convenience @@ -13,25 +17,28 @@ export type { InferTypedSchema, TypedSchema } from '@abapify/adt-schemas'; /** * Speci-compatible schema type that preserves TypedSchema properties - * + * * Combines: * - TypedSchema properties (_type, schema, parse, build) * - Serializable properties (_infer for speci type inference) */ -export type SpeciSchema = - TypedSchema & Serializable; +export type SpeciSchema = TypedSchema< + T, + S +> & + Serializable; /** * Convert ts-xsd TypedSchema to speci-compatible Serializable schema - * + * * Adds the _infer property at runtime for speci's isInferrableSchema check. * This enables automatic body parameter type inference in REST contracts. - * + * * The returned type preserves both TypedSchema and Serializable interfaces, * allowing InferTypedSchema to work correctly. */ export function toSpeciSchema>( - tsxsdSchema: S + tsxsdSchema: S, ): S & Serializable> { type T = InferTypedSchema; // Add _infer property at runtime - speci checks for this with 'in' operator diff --git a/packages/adt-contracts/src/schemas.ts b/packages/adt-contracts/src/schemas.ts index 7555be26..f1b966d2 100644 --- a/packages/adt-contracts/src/schemas.ts +++ b/packages/adt-contracts/src/schemas.ts @@ -1,8 +1,8 @@ /** * Schema re-exports - * + * * Re-exports all schemas from the generated file plus helpers. * This file exists so imports like `from '../../schemas'` continue to work. */ export * from './helpers/speci-schema'; -export * from './generated/schemas'; \ No newline at end of file +export * from './generated/schemas'; diff --git a/packages/adt-contracts/tests/contracts/atc-typed.test.ts b/packages/adt-contracts/tests/contracts/atc-typed.test.ts index 6c1219e0..26f27cb6 100644 --- a/packages/adt-contracts/tests/contracts/atc-typed.test.ts +++ b/packages/adt-contracts/tests/contracts/atc-typed.test.ts @@ -1,14 +1,14 @@ /** * ATC Worklist - Typed Contract Scenario Example - * + * * Demonstrates fully-typed assertRequest/assertResponse/assertBody methods. * If this file compiles, type inference is working correctly! */ import { fixtures } from 'adt-fixtures'; -import { - TypedContractScenario, - runTypedScenario, +import { + TypedContractScenario, + runTypedScenario, expect, type ExtractRequest, } from './base/typed-scenario'; @@ -26,12 +26,12 @@ type WorklistResponse = InferTypedSchema; /** * ATC Worklist GET Scenario - * + * * Shows how to: * 1. Extend TypedContractScenario with contract type * 2. Override assertRequest with fully typed request (inferred from contract) * 3. Override assertResponse with fully typed response (from schema) - * + * * The types are AUTOMATICALLY INFERRED from the contract definition! * - WorklistRequest is inferred from worklistsContract.get descriptor * - WorklistResponse is the AtcworklistSchema type @@ -40,66 +40,69 @@ class AtcWorklistGetScenario extends TypedContractScenario readonly name = 'ATC Worklist GET - Typed'; readonly contract = worklistsContract.get; readonly fixture = fixtures.atc.worklist; - + // Provide parameters for the contract call override getContractParams(): Parameters { return ['WL123', { timestamp: '2024-01-01' }]; } - + /** * Assert request properties - fully typed! - * + * * req.method, req.path, req.query are all typed from the contract. * TypeScript validates that these properties exist! */ override assertRequest(req: WorklistRequest): void { // ✅ TYPE CHECK: method is typed as 'GET' expect(req.method).toBe('GET'); - + // ✅ TYPE CHECK: path is typed as template string expect(req.path).toContain('/sap/bc/adt/atc/worklists/'); - + // ✅ TYPE CHECK: query params are typed from contract definition // req.query?.timestamp - TypeScript knows this property exists! if (req.query) { expect(req.query).toBeDefined(); } } - + /** * Assert response properties - FULLY TYPED from schema! - * + * * res is the parsed XML, typed from AtcworklistSchema. * You can access nested properties with full autocomplete and type checking. */ override assertResponse(res: WorklistResponse): void { // ✅ TYPE CHECK: response is typed from atcworklist schema expect(res).toBeDefined(); - + // Verify it's a parsed object, not raw XML string expect(typeof res).toBe('object'); - + // ✅ FULLY TYPED: Access deep nested properties with type safety! // AtcworklistSchema is a union: { worklist: {...} } | { worklistRun: {...} } if ('worklist' in res) { // TypeScript narrows to { worklist: {...} } branch const worklist = res.worklist; - + // ✅ TYPE CHECK: worklist.id is typed as string expect(worklist.id).toBeDefined(); expect(typeof worklist.id).toBe('string'); - + // ✅ TYPE CHECK: worklist.timestamp is typed as string expect(worklist.timestamp).toBeDefined(); - + // ✅ TYPE CHECK: Deep nested access - objects.object[].findings.finding[].messageId if (worklist.objects.object && worklist.objects.object.length > 0) { const firstObject = worklist.objects.object[0]; expect(firstObject.uri).toBeDefined(); expect(firstObject.type).toBeDefined(); - + // ✅ TYPE CHECK: findings.finding[].messageId - if (firstObject.findings.finding && firstObject.findings.finding.length > 0) { + if ( + firstObject.findings.finding && + firstObject.findings.finding.length > 0 + ) { const firstFinding = firstObject.findings.finding[0]; // All these properties are fully typed! expect(firstFinding.messageId).toBeDefined(); diff --git a/packages/adt-contracts/tests/contracts/atc.test.ts b/packages/adt-contracts/tests/contracts/atc.test.ts index 8d7ed983..33ea080a 100644 --- a/packages/adt-contracts/tests/contracts/atc.test.ts +++ b/packages/adt-contracts/tests/contracts/atc.test.ts @@ -1,8 +1,8 @@ /** * ATC (ABAP Test Cockpit) Contract Tests - * + * * Tests GENERATED contracts from src/generated/adt/sap/bc/adt/atc/ - * + * * Two types of tests: * 1. Contract Definition Tests - validate method, path, headers, body, responses * 2. Client Call Tests - test FULLY TYPED client calls with mock adapter @@ -22,7 +22,7 @@ import { resultsContract } from '../../src/generated/adt/sap/bc/adt/atc/results' class AtcWorklistsScenario extends ContractScenario { readonly name = 'ATC Worklists (Generated)'; - + readonly operations: ContractOperation[] = [ { name: 'get worklist by ID', @@ -38,7 +38,11 @@ class AtcWorklistsScenario extends ContractScenario { }, { name: 'get worklist with query params', - contract: () => worklistsContract.get('WL123', { timestamp: '2024-01-01', includeExemptedFindings: 'true' }), + contract: () => + worklistsContract.get('WL123', { + timestamp: '2024-01-01', + includeExemptedFindings: 'true', + }), method: 'GET', path: '/sap/bc/adt/atc/worklists/WL123', headers: { Accept: '*/*' }, @@ -58,7 +62,7 @@ class AtcWorklistsScenario extends ContractScenario { class AtcResultsScenario extends ContractScenario { readonly name = 'ATC Results (Generated)'; - + readonly operations: ContractOperation[] = [ { name: 'get active results', @@ -88,7 +92,10 @@ class AtcResultsScenario extends ContractScenario { }, { name: 'get result with exempted findings', - contract: () => resultsContract.displayid('RESULT001', { includeExemptedFindings: 'true' }), + contract: () => + resultsContract.displayid('RESULT001', { + includeExemptedFindings: 'true', + }), method: 'GET', path: '/sap/bc/adt/atc/results/RESULT001', headers: { Accept: 'application/xml' }, diff --git a/packages/adt-contracts/tests/contracts/base/index.ts b/packages/adt-contracts/tests/contracts/base/index.ts index 699aa72f..e9384707 100644 --- a/packages/adt-contracts/tests/contracts/base/index.ts +++ b/packages/adt-contracts/tests/contracts/base/index.ts @@ -1,6 +1,6 @@ /** * Contract Testing Framework - * + * * Tests contract definitions: method, path, headers, body, responses. * Uses speci's RestEndpointDescriptor - no duplicate types. */ @@ -58,11 +58,11 @@ export function runScenario(scenario: ContractScenario): void { for (const op of scenario.operations) { describe(op.name, () => { const contract = op.contract(); - + it('has correct method', () => { expect(contract.method).toBe(op.method); }); - + it('has correct path', () => { if (typeof op.path === 'string') { expect(contract.path).toBe(op.path); @@ -70,40 +70,40 @@ export function runScenario(scenario: ContractScenario): void { expect(contract.path).toMatch(op.path); } }); - + // Capture values to avoid non-null assertions in callbacks const { headers, query, body, response } = op; - + if (headers) { it('has correct headers', () => { expect(contract.headers).toMatchObject(headers); }); } - + if (query) { it('has correct query params', () => { expect(contract.query).toEqual(query); }); } - + if (body) { - const bodySchema = body.schema as { - parse: (xml: string) => unknown; + const bodySchema = body.schema as { + parse: (xml: string) => unknown; build?: (data: unknown) => string; }; const bodyFixture = body.fixture; - + it('has body schema', () => { expect(contract.body).toBe(body.schema); }); - + if (bodyFixture) { it('body schema parses fixture', async () => { const xml = await bodyFixture.load(); const parsed = bodySchema.parse(xml); expect(parsed).toBeDefined(); }); - + it('body schema round-trips', async () => { const xml = await bodyFixture.load(); const parsed = bodySchema.parse(xml); @@ -114,16 +114,18 @@ export function runScenario(scenario: ContractScenario): void { }); } } - + if (response) { - const responseSchema = response.schema as { parse: (xml: string) => unknown }; + const responseSchema = response.schema as { + parse: (xml: string) => unknown; + }; const responseFixture = response.fixture; const responseStatus = response.status; - + it(`has response schema for ${responseStatus}`, () => { expect(contract.responses[responseStatus]).toBe(response.schema); }); - + if (responseFixture) { it('response schema parses fixture', async () => { const xml = await responseFixture.load(); diff --git a/packages/adt-contracts/tests/contracts/base/mock-adapter.ts b/packages/adt-contracts/tests/contracts/base/mock-adapter.ts index 64a54323..d30e5fe8 100644 --- a/packages/adt-contracts/tests/contracts/base/mock-adapter.ts +++ b/packages/adt-contracts/tests/contracts/base/mock-adapter.ts @@ -1,6 +1,6 @@ /** * Mock HTTP Adapter for Contract Testing - * + * * Creates a mock adapter that returns fixture data based on request path/method. * Tests the full speci client flow: request → schema parsing → typed response. */ @@ -34,10 +34,10 @@ export interface MockMatcher { /** * Create a mock HTTP adapter for testing - * + * * @param matchers - Array of request matchers with mock responses * @returns HttpAdapter that returns mocked responses - * + * * @example * ```typescript * const adapter = createMockAdapter([ @@ -50,12 +50,12 @@ export interface MockMatcher { * }, * }, * ]); - * + * * const client = createClient(worklistsContract, { * baseUrl: 'https://sap.example.com', * adapter, * }); - * + * * const result = await client.get('123'); * // result is fully typed! * ``` @@ -68,7 +68,7 @@ export function createMockAdapter(matchers: MockMatcher[]): HttpAdapter { } const { method = 'GET', url } = options; - + // Find matching mock const matcher = matchers.find((m) => { if (m.method && m.method !== method) return false; @@ -86,7 +86,7 @@ export function createMockAdapter(matchers: MockMatcher[]): HttpAdapter { } const { response } = matcher; - + // Load body from fixture if needed let body: string; if (typeof response.body === 'string') { @@ -97,8 +97,14 @@ export function createMockAdapter(matchers: MockMatcher[]): HttpAdapter { // Parse response using schema from responses map const responseSchema = options.responses?.[response.status]; - if (responseSchema && typeof responseSchema === 'object' && 'parse' in responseSchema) { - const parsed = (responseSchema as { parse: (xml: string) => unknown }).parse(body); + if ( + responseSchema && + typeof responseSchema === 'object' && + 'parse' in responseSchema + ) { + const parsed = ( + responseSchema as { parse: (xml: string) => unknown } + ).parse(body); return parsed as TResponse; } @@ -114,7 +120,7 @@ export function createMockAdapter(matchers: MockMatcher[]): HttpAdapter { */ export function createSimpleMockAdapter( body: string | FixtureHandle, - status = 200 + status = 200, ): HttpAdapter { return createMockAdapter([ { diff --git a/packages/adt-contracts/tests/contracts/base/typed-scenario.ts b/packages/adt-contracts/tests/contracts/base/typed-scenario.ts index 76ed3070..9b6d1e0b 100644 --- a/packages/adt-contracts/tests/contracts/base/typed-scenario.ts +++ b/packages/adt-contracts/tests/contracts/base/typed-scenario.ts @@ -1,20 +1,20 @@ /** * Typed Contract Scenario Framework - * + * * Abstract base class with generic type parameter from contract. * Provides fully-typed assertRequest/assertResponse methods. - * + * * @example * ```typescript * class AtcWorklistScenario extends TypedContractScenario { * readonly contract = worklistsContract.get; * readonly fixture = fixtures.atc.worklist; - * + * * assertRequest(req) { * // req.query is fully typed! * expect(req.query?.timestamp).toBeDefined(); * } - * + * * assertResponse(res) { * // res is fully typed from schema! * expect(res.worklist.objectSet[0].finding[0].messageId).toBe('...'); @@ -25,8 +25,8 @@ import { describe, it, expect } from 'vitest'; import type { FixtureHandle } from 'adt-fixtures'; -import type { - RestEndpointDescriptor, +import type { + RestEndpointDescriptor, InferSuccessResponse, InferSchema, } from 'speci/rest'; @@ -43,92 +43,99 @@ type ExtractDescriptor = T extends (...args: any[]) => infer D ? D : never; * Extract request type from a contract operation * Includes: method, path, headers, query, body */ -type ExtractRequest = ExtractDescriptor extends RestEndpointDescriptor< - infer TMethod, - infer TPath, - infer TBody, - infer _TResponses -> - ? { - method: TMethod; - path: TPath; - headers?: Record; - query?: ExtractDescriptor extends { query?: infer Q } ? Q : undefined; - body?: InferSchema; - } - : never; +type ExtractRequest = + ExtractDescriptor extends RestEndpointDescriptor< + infer TMethod, + infer TPath, + infer TBody, + infer _TResponses + > + ? { + method: TMethod; + path: TPath; + headers?: Record; + query?: ExtractDescriptor extends { query?: infer Q } + ? Q + : undefined; + body?: InferSchema; + } + : never; /** * Extract response type from a contract operation (200 response) */ -type ExtractResponse = ExtractDescriptor extends RestEndpointDescriptor - ? InferSuccessResponse> - : never; +type ExtractResponse = + ExtractDescriptor extends RestEndpointDescriptor + ? InferSuccessResponse> + : never; /** * Extract body type from a contract operation (for POST/PUT) * Uses InferSchema to get the typed body from the body schema */ -type ExtractBody = ExtractDescriptor extends RestEndpointDescriptor< - infer _TMethod, - infer _TPath, - infer TBody, - infer _TResponses -> - ? InferSchema - : never; +type ExtractBody = + ExtractDescriptor extends RestEndpointDescriptor< + infer _TMethod, + infer _TPath, + infer TBody, + infer _TResponses + > + ? InferSchema + : never; /** * Abstract base class for typed contract scenarios. - * + * * Generic parameter TContract is the contract operation function type. * This flows through to provide full typing for request/response assertions. - * + * * @template TContract - The contract operation function type (e.g., typeof worklistsContract.get) */ export abstract class TypedContractScenario< // eslint-disable-next-line @typescript-eslint/no-explicit-any - TContract extends (...args: any[]) => RestEndpointDescriptor + TContract extends (...args: any[]) => RestEndpointDescriptor, > { /** Human-readable scenario name */ abstract readonly name: string; - + /** The contract operation function */ abstract readonly contract: TContract; - + /** Fixture for response data */ abstract readonly fixture: FixtureHandle; - + /** Parameters to pass to the contract function */ getContractParams(): Parameters { return [] as unknown as Parameters; } - + /** * Assert request properties. * Override to add custom request assertions. - * + * * @param request - Fully typed request object */ assertRequest(_request: ExtractRequest): void { // Default: no assertions, override in subclass } - + /** * Assert response properties. * Override to add custom response assertions. - * + * * @param response - Fully typed response object (parsed from fixture) */ assertResponse(_response: ExtractResponse): void { // Default: no assertions, override in subclass } - + /** * Get the contract descriptor for this scenario */ getDescriptor(): ExtractDescriptor { - return this.contract(...this.getContractParams()) as ExtractDescriptor; + return this.contract( + ...this.getContractParams(), + ) as ExtractDescriptor; } } @@ -136,20 +143,20 @@ export abstract class TypedContractScenario< * Run a typed contract scenario. * Executes request/response assertions with full type safety. */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function runTypedScenario RestEndpointDescriptor>( - scenario: TypedContractScenario -): void { + +export function runTypedScenario< + T extends (...args: any[]) => RestEndpointDescriptor, +>(scenario: TypedContractScenario): void { describe(scenario.name, () => { const descriptor = scenario.getDescriptor(); - + describe('request', () => { it('has valid contract descriptor', () => { expect(descriptor).toBeDefined(); expect(descriptor.method).toBeDefined(); expect(descriptor.path).toBeDefined(); }); - + it('passes request assertions', () => { const request = { method: descriptor.method, @@ -158,11 +165,11 @@ export function runTypedScenario RestEndpointDescr query: descriptor.query, body: descriptor.body, } as ExtractRequest; - + scenario.assertRequest(request); }); }); - + describe('response', () => { it('parses fixture and passes response assertions', async () => { // Create mock adapter that returns fixture @@ -171,16 +178,23 @@ export function runTypedScenario RestEndpointDescr response: { status: 200, body: scenario.fixture }, }, ]); - + // Create client with mock adapter - const client = createClient({ operation: scenario.contract }, { - baseUrl: '', - adapter, - }); - + const client = createClient( + { operation: scenario.contract }, + { + baseUrl: '', + adapter, + }, + ); + // Call the operation - const response = await (client.operation as unknown as (...args: unknown[]) => Promise)(...scenario.getContractParams()); - + const response = await ( + client.operation as unknown as ( + ...args: unknown[] + ) => Promise + )(...scenario.getContractParams()); + // Run typed assertions scenario.assertResponse(response as ExtractResponse); }); diff --git a/packages/adt-contracts/tests/contracts/cts.test.ts b/packages/adt-contracts/tests/contracts/cts.test.ts index 65bc5c61..254e2bca 100644 --- a/packages/adt-contracts/tests/contracts/cts.test.ts +++ b/packages/adt-contracts/tests/contracts/cts.test.ts @@ -1,28 +1,34 @@ /** * CTS (Change and Transport System) Contract Scenarios - * + * * NOTE: CTS contracts use plain objects with methods (not wrapped with contract()), * so client call tests are not applicable here. The contract definition tests * verify the structure is correct. */ import { fixtures } from 'adt-fixtures'; -import { transportmanagmentSingle, transportmanagmentCreate, transportfind, transportmanagment } from '../../src/schemas'; +import { + transportmanagmentSingle, + transportmanagmentCreate, + transportfind, + transportmanagment, +} from '../../src/schemas'; import { ContractScenario, runScenario, type ContractOperation } from './base'; import { transports, TransportFunction } from '../../src/adt/cts/transports'; import { transportrequests } from '../../src/adt/cts/transportrequests'; class TransportsScenario extends ContractScenario { readonly name = 'CTS Transports'; - + readonly operations: ContractOperation[] = [ { name: 'find transports', - contract: () => transports.find({ - _action: 'FIND', - user: '*', - trfunction: TransportFunction.ALL - }), + contract: () => + transports.find({ + _action: 'FIND', + user: '*', + trfunction: TransportFunction.ALL, + }), method: 'GET', path: '/sap/bc/adt/cts/transports', headers: { Accept: '*/*' }, @@ -34,11 +40,12 @@ class TransportsScenario extends ContractScenario { }, { name: 'find workbench requests for user', - contract: () => transports.find({ - _action: 'FIND', - user: 'DEVELOPER', - trfunction: TransportFunction.WORKBENCH - }), + contract: () => + transports.find({ + _action: 'FIND', + user: 'DEVELOPER', + trfunction: TransportFunction.WORKBENCH, + }), method: 'GET', path: '/sap/bc/adt/cts/transports', query: { _action: 'FIND', user: 'DEVELOPER', trfunction: 'K' }, @@ -49,7 +56,7 @@ class TransportsScenario extends ContractScenario { class TransportRequestsScenario extends ContractScenario { readonly name = 'CTS Transport Requests'; - + readonly operations: ContractOperation[] = [ { name: 'list all transports', diff --git a/packages/adt-contracts/tests/contracts/discovery.test.ts b/packages/adt-contracts/tests/contracts/discovery.test.ts index 65b88408..179bdbc3 100644 --- a/packages/adt-contracts/tests/contracts/discovery.test.ts +++ b/packages/adt-contracts/tests/contracts/discovery.test.ts @@ -1,6 +1,6 @@ /** * Discovery Contract Scenarios - * + * * Two types of tests: * 1. Contract Definition Tests - validate method, path, headers, body, responses * 2. Client Call Tests - test FULLY TYPED client calls @@ -10,7 +10,12 @@ import { describe, it, expect } from 'vitest'; import { discovery } from '../../src/schemas'; -import { ContractScenario, runScenario, type ContractOperation, createClient } from './base'; +import { + ContractScenario, + runScenario, + type ContractOperation, + createClient, +} from './base'; import { discoveryContract } from '../../src/adt/discovery'; import { createMockAdapter } from '../helpers/mock-adapter'; @@ -24,7 +29,7 @@ const MOCK_DISCOVERY_XML = ` class DiscoveryScenario extends ContractScenario { readonly name = 'Discovery'; - + readonly operations: ContractOperation[] = [ { name: 'get discovery document', @@ -59,12 +64,13 @@ describe('Discovery Client Calls - Typed Response Validation', () => { // TYPE CHECK: These property accesses would fail to compile if type inference breaks! // The compiler verifies these properties exist on the response type const _typeCheck_service: typeof response.service = response.service; - const _typeCheck_workspace: typeof response.service.workspace = response.service?.workspace; - + const _typeCheck_workspace: typeof response.service.workspace = + response.service?.workspace; + // Suppress unused variable warnings void _typeCheck_service; void _typeCheck_workspace; - + // Runtime assertion expect(response).toBeDefined(); }); diff --git a/packages/adt-contracts/tests/contracts/oo.test.ts b/packages/adt-contracts/tests/contracts/oo.test.ts index bb3afac1..18fb6786 100644 --- a/packages/adt-contracts/tests/contracts/oo.test.ts +++ b/packages/adt-contracts/tests/contracts/oo.test.ts @@ -1,17 +1,20 @@ /** * OO (Object-Oriented) Contract Scenarios - * + * * Classes and Interfaces CRUD operations. */ -import { classes as classesSchema, interfaces as interfacesSchema } from '../../src/schemas'; +import { + classes as classesSchema, + interfaces as interfacesSchema, +} from '../../src/schemas'; import { ContractScenario, runScenario, type ContractOperation } from './base'; import { ooContract } from '../../src/adt/oo'; import { fixtures } from 'adt-fixtures'; class ClassesScenario extends ContractScenario { readonly name = 'OO Classes'; - + readonly operations: ContractOperation[] = [ { name: 'get class metadata', @@ -61,7 +64,7 @@ class ClassesScenario extends ContractScenario { class ClassSourceScenario extends ContractScenario { readonly name = 'OO Class Source'; - + readonly operations: ContractOperation[] = [ { name: 'get main source', @@ -73,7 +76,7 @@ class ClassSourceScenario extends ContractScenario { }, { name: 'update main source', - contract: () => ooContract.classes.source.main.put('ZCL_TEST', 'CLASS zcl_test...'), + contract: () => ooContract.classes.source.main.put('ZCL_TEST'), method: 'PUT', path: '/sap/bc/adt/oo/classes/zcl_test/source/main', headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' }, @@ -87,7 +90,8 @@ class ClassSourceScenario extends ContractScenario { }, { name: 'get implementations include', - contract: () => ooContract.classes.includes.implementations.get('ZCL_TEST'), + contract: () => + ooContract.classes.includes.implementations.get('ZCL_TEST'), method: 'GET', path: '/sap/bc/adt/oo/classes/zcl_test/includes/implementations', headers: { Accept: 'text/plain' }, @@ -101,7 +105,8 @@ class ClassSourceScenario extends ContractScenario { }, { name: 'update include by type', - contract: () => ooContract.classes.includes.put('ZCL_TEST', 'definitions', 'TYPES...'), + contract: () => + ooContract.classes.includes.put('ZCL_TEST', 'definitions'), method: 'PUT', path: '/sap/bc/adt/oo/classes/zcl_test/includes/definitions', headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' }, @@ -111,7 +116,7 @@ class ClassSourceScenario extends ContractScenario { class InterfacesScenario extends ContractScenario { readonly name = 'OO Interfaces'; - + readonly operations: ContractOperation[] = [ { name: 'get interface metadata', @@ -164,7 +169,7 @@ class InterfacesScenario extends ContractScenario { }, { name: 'update interface source', - contract: () => ooContract.interfaces.source.main.put('ZIF_TEST', 'INTERFACE zif_test...'), + contract: () => ooContract.interfaces.source.main.put('ZIF_TEST'), method: 'PUT', path: '/sap/bc/adt/oo/interfaces/zif_test/source/main', headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' }, @@ -174,7 +179,7 @@ class InterfacesScenario extends ContractScenario { class ClassRunScenario extends ContractScenario { readonly name = 'OO Class Run'; - + readonly operations: ContractOperation[] = [ { name: 'execute class', @@ -185,7 +190,8 @@ class ClassRunScenario extends ContractScenario { }, { name: 'execute class with profiler', - contract: () => ooContract.classrun.post('ZCL_CONSOLE_APP', { profilerId: 'PROF001' }), + contract: () => + ooContract.classrun.post('ZCL_CONSOLE_APP', { profilerId: 'PROF001' }), method: 'POST', path: '/sap/bc/adt/oo/classrun/zcl_console_app', query: { profilerId: 'PROF001' }, diff --git a/packages/adt-contracts/tests/helpers/mock-adapter.ts b/packages/adt-contracts/tests/helpers/mock-adapter.ts index 6c80791b..bf8c3fb7 100644 --- a/packages/adt-contracts/tests/helpers/mock-adapter.ts +++ b/packages/adt-contracts/tests/helpers/mock-adapter.ts @@ -1,6 +1,6 @@ /** * Mock HTTP Adapter for Contract Testing - * + * * Returns XML strings that get parsed by the contract's response schema. * This tests the full contract flow: input types → HTTP → XML → parsed output types. */ @@ -40,7 +40,9 @@ export function createMockAdapter(mockResponse: MockResponse): { let lastRequest: CapturedRequest | undefined; const adapter: HttpAdapter = { - request: async (options?: HttpRequestOptions): Promise => { + request: async ( + options?: HttpRequestOptions, + ): Promise => { if (!options) { throw new Error('No request options provided'); } @@ -58,7 +60,9 @@ export function createMockAdapter(mockResponse: MockResponse): { // If body schema provided, serialize body to XML if (options.bodySchema && options.body) { - const schema = options.bodySchema as { build?: (data: unknown) => string }; + const schema = options.bodySchema as { + build?: (data: unknown) => string; + }; if (schema.build) { lastRequest.bodyXml = schema.build(options.body); } @@ -66,7 +70,9 @@ export function createMockAdapter(mockResponse: MockResponse): { // Get response schema for the status code const status = mockResponse.status ?? 200; - const responseSchema = options.responses?.[status] as { parse: (xml: string) => TResponse } | undefined; + const responseSchema = options.responses?.[status] as + | { parse: (xml: string) => TResponse } + | undefined; if (!responseSchema) { throw new Error(`No response schema for status ${status}`); diff --git a/packages/adt-contracts/tests/typed-client.test.ts b/packages/adt-contracts/tests/typed-client.test.ts index b381ba81..20e990c3 100644 --- a/packages/adt-contracts/tests/typed-client.test.ts +++ b/packages/adt-contracts/tests/typed-client.test.ts @@ -1,11 +1,11 @@ /** * Fully-Typed Contract Client Tests - * + * * Demonstrates that: * 1. Response types are fully inferred from schema - * 2. POST body types are fully inferred from schema + * 2. POST body types are fully inferred from schema * 3. Mock adapter returns parsed, typed data from fixtures - * + * * If this file compiles, type inference is working correctly! */ @@ -45,7 +45,7 @@ describe('Typed Client - GET Response', () => { // ✅ TYPE CHECK: result should be typed as the parsed transport schema // If this compiles, the response type is correctly inferred! expect(result).toBeDefined(); - + // Access nested properties - these would fail compilation if types were wrong // The exact structure depends on the schema, but we verify it's an object expect(typeof result).toBe('object'); @@ -124,7 +124,7 @@ describe('Typed Client - Compile-Time Type Safety', () => { // - client.transportrequests(params?) - list transports // - client.attribute(name, params?) - get attribute valuehelp // - client.target(name, params?) - get target valuehelp - + // The fact that this compiles proves: // 1. Contract methods are correctly typed // 2. Parameters are inferred from contract definition @@ -161,7 +161,7 @@ describe('Typed Client - Schema Parsing', () => { // So result should be a parsed object, not raw XML expect(result).toBeDefined(); expect(typeof result).toBe('object'); - + // Should NOT be a string (raw XML) expect(typeof result).not.toBe('string'); }); diff --git a/packages/adt-export/README.md b/packages/adt-export/README.md index 556a0282..75790966 100644 --- a/packages/adt-export/README.md +++ b/packages/adt-export/README.md @@ -14,9 +14,7 @@ Add to your `adt.config.ts`: ```typescript export default { - commands: [ - '@abapify/adt-export/commands/export', - ], + commands: ['@abapify/adt-export/commands/export'], }; ``` @@ -38,15 +36,15 @@ adt export --source ./my-objects --format oat --transport DEVK900123 --no-activa ## Options -| Option | Description | Default | -|--------|-------------|---------| -| `-s, --source ` | Source directory containing serialized files | `.` | -| `-f, --format ` | Format plugin: `oat`, `abapgit`, `@abapify/oat` | `oat` | -| `-t, --transport ` | Transport request for changes | (required unless dry-run) | -| `-p, --package ` | Target package for new objects | | -| `--types ` | Filter by object types (comma-separated) | | -| `--dry-run` | Validate without saving to SAP | `false` | -| `--no-activate` | Save inactive (skip activation) | `false` | +| Option | Description | Default | +| --------------------------- | ----------------------------------------------- | ------------------------- | +| `-s, --source ` | Source directory containing serialized files | `.` | +| `-f, --format ` | Format plugin: `oat`, `abapgit`, `@abapify/oat` | `oat` | +| `-t, --transport ` | Transport request for changes | (required unless dry-run) | +| `-p, --package ` | Target package for new objects | | +| `--types ` | Filter by object types (comma-separated) | | +| `--dry-run` | Validate without saving to SAP | `false` | +| `--no-activate` | Save inactive (skip activation) | `false` | ## Architecture @@ -56,6 +54,7 @@ This plugin follows the two-generator pattern: 2. **Format Plugin** → yields ADK objects ready to deploy The export command: + 1. Creates a FileTree from the source directory 2. Calls the format plugin's `export(fileTree)` generator 3. For each yielded ADK object: diff --git a/packages/adt-export/src/commands/export.ts b/packages/adt-export/src/commands/export.ts index e795e804..64f75e1b 100644 --- a/packages/adt-export/src/commands/export.ts +++ b/packages/adt-export/src/commands/export.ts @@ -1,11 +1,15 @@ /** * Export Command Plugin - * + * * CLI-agnostic command for exporting local files to SAP. * Uses the CliContext for ADT client access. */ -import type { CliCommandPlugin, CliContext, AdtPlugin } from '@abapify/adt-plugin'; +import type { + CliCommandPlugin, + CliContext, + AdtPlugin, +} from '@abapify/adt-plugin'; import { AdkObjectSet, type AdkContext } from '@abapify/adk'; import type { ExportResult } from '../types'; import { createFileTree } from '../utils/filetree'; @@ -14,8 +18,8 @@ import { createFileTree } from '../utils/filetree'; * Format shortcuts - map short names to actual package names */ const FORMAT_SHORTCUTS: Record = { - 'abapgit': '@abapify/adt-plugin-abapgit', - 'ag': '@abapify/adt-plugin-abapgit', // alias + abapgit: '@abapify/adt-plugin-abapgit', + ag: '@abapify/adt-plugin-abapgit', // alias }; /** @@ -23,33 +27,42 @@ const FORMAT_SHORTCUTS: Record = { */ async function loadFormatPlugin(formatSpec: string): Promise { const packageName = FORMAT_SHORTCUTS[formatSpec] ?? formatSpec; - + try { const pluginModule = await import(packageName); - const PluginClass = pluginModule.default || pluginModule[Object.keys(pluginModule)[0]]; - + const PluginClass = + pluginModule.default || pluginModule[Object.keys(pluginModule)[0]]; + if (!PluginClass) { throw new Error(`No plugin class found in ${packageName}`); } - + // Check if it's already an instance or needs instantiation return typeof PluginClass === 'function' && PluginClass.prototype ? new PluginClass() : PluginClass; } catch (error: unknown) { - const err = error as { code?: string }; - if (err?.code === 'MODULE_NOT_FOUND') { - throw new Error(`Plugin package '${packageName}' not found. Install it with: bun add ${packageName}`); + const err = error as Error; + // Check both error code (CommonJS) and message (ES modules) + if ( + (err as any).code === 'MODULE_NOT_FOUND' || + err.message?.includes(`Cannot find module '${packageName}'`) + ) { + throw new Error( + `Plugin package '${packageName}' not found. Install it with: bun add ${packageName}`, + ); } throw error; } } - /** * Display export results in console */ -function displayExportResults(result: ExportResult, logger: CliContext['logger']): void { +function displayExportResults( + result: ExportResult, + logger: CliContext['logger'], +): void { if (result.discovered === 0) { logger.warn('⚠️ No objects found to export'); return; @@ -63,11 +76,13 @@ function displayExportResults(result: ExportResult, logger: CliContext['logger'] if (result.failed > 0) logger.error(` ❌ Failed: ${result.failed}`); // Show failed objects - const failed = result.objects.filter(o => o.status === 'failed'); + const failed = result.objects.filter((o) => o.status === 'failed'); if (failed.length > 0) { logger.error('\n❌ Failed objects:'); for (const obj of failed.slice(0, 5)) { - logger.error(` ${obj.type} ${obj.name}: ${obj.error || 'unknown error'}`); + logger.error( + ` ${obj.type} ${obj.name}: ${obj.error || 'unknown error'}`, + ); } if (failed.length > 5) { logger.error(` ... (${failed.length - 5} more)`); @@ -77,9 +92,9 @@ function displayExportResults(result: ExportResult, logger: CliContext['logger'] /** * Export Command Plugin - * + * * Exports local serialized files to SAP system. - * + * * Usage in adt.config.ts: * ```typescript * export default { @@ -92,17 +107,42 @@ function displayExportResults(result: ExportResult, logger: CliContext['logger'] export const exportCommand: CliCommandPlugin = { name: 'export', description: 'Export local files to SAP (deploy serialized objects)', - + options: [ - { flags: '-s, --source ', description: 'Source directory containing serialized files', default: '.' }, - { flags: '-f, --format ', description: 'Format plugin: oat | abapgit | @abapify/oat', default: 'oat' }, - { flags: '-t, --transport ', description: 'Transport request for changes' }, - { flags: '-p, --package ', description: 'Target package for new objects' }, - { flags: '--types ', description: 'Filter by object types (comma-separated, e.g., CLAS,INTF)' }, - { flags: '--dry-run', description: 'Validate without saving to SAP', default: false }, - { flags: '--no-activate', description: 'Save inactive (skip activation)', default: false }, + { + flags: '-s, --source ', + description: 'Source directory containing serialized files', + default: '.', + }, + { + flags: '-f, --format ', + description: 'Format plugin: oat | abapgit | @abapify/oat', + default: 'oat', + }, + { + flags: '-t, --transport ', + description: 'Transport request for changes', + }, + { + flags: '-p, --package ', + description: 'Target package for new objects', + }, + { + flags: '--types ', + description: 'Filter by object types (comma-separated, e.g., CLAS,INTF)', + }, + { + flags: '--dry-run', + description: 'Validate without saving to SAP', + default: false, + }, + { + flags: '--no-activate', + description: 'Save inactive (skip activation)', + default: false, + }, ], - + async execute(args: Record, ctx: CliContext) { const options = args as { source: string; @@ -121,7 +161,9 @@ export const exportCommand: CliCommandPlugin = { // Get ADT client from context if (!ctx.getAdtClient) { - ctx.logger.error('❌ ADT client not available. This command requires authentication.'); + ctx.logger.error( + '❌ ADT client not available. This command requires authentication.', + ); ctx.logger.error(' Run: adt auth login'); process.exit(1); } @@ -129,7 +171,8 @@ export const exportCommand: CliCommandPlugin = { ctx.logger.info('🚀 Starting export...'); ctx.logger.info(`📁 Source: ${options.source}`); ctx.logger.info(`🎯 Format: ${options.format}`); - if (options.transport) ctx.logger.info(`🚚 Transport: ${options.transport}`); + if (options.transport) + ctx.logger.info(`🚚 Transport: ${options.transport}`); if (options.package) ctx.logger.info(`📦 Package: ${options.package}`); if (options.dryRun) ctx.logger.info(`🔍 Mode: Dry run (no changes)`); @@ -138,7 +181,7 @@ export const exportCommand: CliCommandPlugin = { // Parse object types filter const objectTypes = options.types - ? options.types.split(',').map(t => t.trim().toUpperCase()) + ? options.types.split(',').map((t) => t.trim().toUpperCase()) : undefined; const result: ExportResult = { @@ -154,26 +197,28 @@ export const exportCommand: CliCommandPlugin = { // Load format plugin ctx.logger.info(`📦 Loading format plugin: ${options.format}...`); const plugin = await loadFormatPlugin(options.format); - + // Check if plugin supports export if (!plugin.format.export) { ctx.logger.error(`❌ Plugin '${plugin.name}' does not support export`); - ctx.logger.info(' The plugin needs to implement format.export(fileTree) generator'); + ctx.logger.info( + ' The plugin needs to implement format.export(fileTree) generator', + ); process.exit(1); } // Get ADT client and create ADK context const client = await ctx.getAdtClient!(); const adkContext: AdkContext = { client: client as any }; - + ctx.logger.info('🔍 Scanning files and building object tree...'); - + // Collect objects from plugin generator into AdkObjectSet const objectSet = await AdkObjectSet.fromGenerator( plugin.format.export(fileTree, client), adkContext, { - filter: objectTypes + filter: objectTypes ? (obj) => { const included = objectTypes.includes(obj.type.toUpperCase()); if (!included) { @@ -191,9 +236,9 @@ export const exportCommand: CliCommandPlugin = { result.discovered++; ctx.logger.info(` 📄 ${obj.kind} ${obj.name}`); }, - } + }, ); - + // Adjust discovered count (filter callback increments for skipped too) result.discovered += result.skipped; @@ -208,7 +253,7 @@ export const exportCommand: CliCommandPlugin = { // ============================================ if (!options.dryRun) { ctx.logger.info(`\n🚀 Deploying ${objectSet.size} objects...`); - + // Use AdkObjectSet.deploy() for save inactive + bulk activate // Use 'upsert' mode: tries lock first (update existing), falls back to create if not found const deployResult = await objectSet.deploy({ @@ -216,14 +261,16 @@ export const exportCommand: CliCommandPlugin = { activate: options.activate !== false, mode: 'upsert', onProgress: (saved, total, obj) => { - ctx.logger.info(` 💾 [${saved + 1}/${total}] ${obj.kind} ${obj.name}`); + ctx.logger.info( + ` 💾 [${saved + 1}/${total}] ${obj.kind} ${obj.name}`, + ); }, }); - + // Map save results result.saved = deployResult.save.success; result.failed = deployResult.save.failed; - + for (const r of deployResult.save.results) { result.objects.push({ type: r.object.type, @@ -232,23 +279,26 @@ export const exportCommand: CliCommandPlugin = { error: r.error, }); } - + // Map activation results if (deployResult.activation) { result.activated = deployResult.activation.success; - + if (deployResult.activation.success > 0) { - ctx.logger.info(`\n✅ ${deployResult.activation.success} objects activated`); + ctx.logger.info( + `\n✅ ${deployResult.activation.success} objects activated`, + ); } if (deployResult.activation.failed > 0) { - ctx.logger.warn(`⚠️ ${deployResult.activation.failed} objects failed activation`); + ctx.logger.warn( + `⚠️ ${deployResult.activation.failed} objects failed activation`, + ); for (const msg of deployResult.activation.messages) { ctx.logger.warn(` ${msg}`); } } } // Note: deploy() handles unlockAll() automatically - } else { // Dry run - just mark as would-be-saved for (const obj of objectSet) { @@ -259,11 +309,14 @@ export const exportCommand: CliCommandPlugin = { }); } result.saved = objectSet.size; - ctx.logger.info(`\n🔍 Dry run: ${objectSet.size} objects would be saved`); + ctx.logger.info( + `\n🔍 Dry run: ${objectSet.size} objects would be saved`, + ); } - } catch (error) { - ctx.logger.error(`❌ Export failed: ${error instanceof Error ? error.message : String(error)}`); + ctx.logger.error( + `❌ Export failed: ${error instanceof Error ? error.message : String(error)}`, + ); process.exit(1); } diff --git a/packages/adt-export/src/index.ts b/packages/adt-export/src/index.ts index ec61cae0..3bb07f84 100644 --- a/packages/adt-export/src/index.ts +++ b/packages/adt-export/src/index.ts @@ -1,8 +1,8 @@ /** * @abapify/adt-export - * + * * Export CLI plugin for adt-cli - deploy local files to SAP. - * + * * @example * ```typescript * // In adt.config.ts @@ -16,4 +16,9 @@ export { exportCommand } from './commands/export'; export { createFileTree, FsFileTree, MemoryFileTree } from './utils/filetree'; -export type { FileTree, ExportResult, ExportObjectResult, ExportOptions } from './types'; +export type { + FileTree, + ExportResult, + ExportObjectResult, + ExportOptions, +} from './types'; diff --git a/packages/adt-export/src/utils/filetree.ts b/packages/adt-export/src/utils/filetree.ts index 99af909c..2c83941f 100644 --- a/packages/adt-export/src/utils/filetree.ts +++ b/packages/adt-export/src/utils/filetree.ts @@ -2,7 +2,12 @@ * FileTree implementations */ -import { readFile, readdir, access, glob as nativeGlob } from 'node:fs/promises'; +import { + readFile, + readdir, + access, + glob as nativeGlob, +} from 'node:fs/promises'; import { join } from 'node:path'; import type { FileTree } from '@abapify/adt-plugin'; @@ -25,7 +30,7 @@ export class FsFileTree implements FileTree { const fullPath = join(this.root, path); const content = await readFile(fullPath, 'utf-8'); // Strip UTF-8 BOM if present - return content.charCodeAt(0) === 0xFEFF ? content.slice(1) : content; + return content.charCodeAt(0) === 0xfeff ? content.slice(1) : content; } async readBuffer(path: string): Promise { @@ -55,19 +60,20 @@ export class FsFileTree implements FileTree { export class MemoryFileTree implements FileTree { constructor( public readonly root: string, - private files: Map + private files: Map, ) {} async glob(pattern: string): Promise { // Simple glob matching for testing const regex = new RegExp( - '^' + pattern - .replace(/\*\*/g, '.*') - .replace(/\*/g, '[^/]*') - .replace(/\./g, '\\.') - + '$' + '^' + + pattern + .replace(/\*\*/g, '.*') + .replace(/\*/g, '[^/]*') + .replace(/\./g, '\\.') + + '$', ); - return Array.from(this.files.keys()).filter(p => regex.test(p)); + return Array.from(this.files.keys()).filter((p) => regex.test(p)); } async read(path: string): Promise { @@ -93,7 +99,7 @@ export class MemoryFileTree implements FileTree { async readdir(path: string): Promise { const prefix = path ? path + '/' : ''; const entries = new Set(); - + for (const filePath of this.files.keys()) { if (filePath.startsWith(prefix)) { const rest = filePath.slice(prefix.length); @@ -101,7 +107,7 @@ export class MemoryFileTree implements FileTree { entries.add(firstPart); } } - + return Array.from(entries); } } diff --git a/packages/adt-fixtures/src/fixtures/registry.ts b/packages/adt-fixtures/src/fixtures/registry.ts index dfd35322..302aa443 100644 --- a/packages/adt-fixtures/src/fixtures/registry.ts +++ b/packages/adt-fixtures/src/fixtures/registry.ts @@ -1,6 +1,6 @@ /** * Fixture registry - lives with the fixtures - * + * * Add new fixtures here as simple path strings. * The proxy in src/fixtures.ts will auto-generate loaders. */ diff --git a/packages/adt-playwright/package.json b/packages/adt-playwright/package.json index 691fe5c4..579d818b 100644 --- a/packages/adt-playwright/package.json +++ b/packages/adt-playwright/package.json @@ -11,6 +11,7 @@ "./package.json": "./package.json" }, "dependencies": { + "@abapify/adt-auth": "*", "@abapify/adt-config": "*", "@abapify/browser-auth": "*", "playwright": "^1.57.0" diff --git a/packages/adt-playwright/src/adapter.ts b/packages/adt-playwright/src/adapter.ts index 49a4816c..ab17c7fb 100644 --- a/packages/adt-playwright/src/adapter.ts +++ b/packages/adt-playwright/src/adapter.ts @@ -1,13 +1,17 @@ /** * Playwright Browser Adapter - * + * * Implements BrowserAdapter interface for Playwright. * This is a thin wrapper - all auth logic is in @abapify/browser-auth. */ import { chromium } from 'playwright'; import type { BrowserContext, Page, Cookie } from 'playwright'; -import type { BrowserAdapter, CookieData, ResponseEvent } from '@abapify/browser-auth'; +import type { + BrowserAdapter, + CookieData, + ResponseEvent, +} from '@abapify/browser-auth'; /** * Convert Playwright cookie to CookieData @@ -31,7 +35,7 @@ function convertCookie(cookie: Cookie): CookieData { export function createPlaywrightAdapter(): BrowserAdapter { let context: BrowserContext | null = null; let page: Page | null = null; - + const responseHandlers: ((event: ResponseEvent) => void)[] = []; const closeHandlers: (() => void)[] = []; @@ -57,22 +61,24 @@ export function createPlaywrightAdapter(): BrowserAdapter { page = await context.newPage(); // Wire up event handlers - page.on('response', response => { + page.on('response', (response) => { const event: ResponseEvent = { url: response.url(), status: response.status(), }; - responseHandlers.forEach(handler => handler(event)); + responseHandlers.forEach((handler) => handler(event)); }); page.once('close', () => { - closeHandlers.forEach(handler => handler()); + closeHandlers.forEach((handler) => handler()); }); }, async goto(url, options) { if (!page) throw new Error('Page not created'); - await page.goto(url, { timeout: options?.timeout ?? 30000 }).catch(() => {}); + await page + .goto(url, { timeout: options?.timeout ?? 30000 }) + .catch(() => {}); }, async getCookies() { @@ -84,12 +90,17 @@ export function createPlaywrightAdapter(): BrowserAdapter { async clearCookies(domain: string) { if (!context) throw new Error('Browser not launched'); const cookies = await context.cookies(); - const toRemove = cookies.filter(c => - c.domain.includes(domain) || domain.includes(c.domain.replace(/^\./, '')) + const toRemove = cookies.filter( + (c) => + c.domain.includes(domain) || + domain.includes(c.domain.replace(/^\./, '')), ); // Clear each matching cookie individually for (const cookie of toRemove) { - await context.clearCookies({ name: cookie.name, domain: cookie.domain }); + await context.clearCookies({ + name: cookie.name, + domain: cookie.domain, + }); } }, diff --git a/packages/adt-playwright/src/index.ts b/packages/adt-playwright/src/index.ts index b2520540..0adbfb61 100644 --- a/packages/adt-playwright/src/index.ts +++ b/packages/adt-playwright/src/index.ts @@ -5,13 +5,19 @@ * Uses @abapify/browser-auth core with Playwright adapter. */ -import { playwrightAuth } from './playwright-auth'; import type { AdtConfig, Destination } from '@abapify/adt-config'; import type { BrowserAuthOptions } from '@abapify/browser-auth'; // Re-export types -export type { PlaywrightCredentials, PlaywrightAuthOptions } from './playwright-auth'; -export type { BrowserCredentials, BrowserAuthOptions, CookieData } from '@abapify/browser-auth'; +export type { + PlaywrightCredentials, + PlaywrightAuthOptions, +} from './playwright-auth'; +export type { + BrowserCredentials, + BrowserAuthOptions, + CookieData, +} from '@abapify/browser-auth'; /** * Plugin-level options applied to all destinations @@ -33,7 +39,7 @@ function createPlaywrightDestination(options: BrowserAuthOptions): Destination { */ export function withPlaywright( config: AdtConfig, - options?: Partial + options?: Partial, ): AdtConfig { if (!config.destinations) { return config; @@ -43,7 +49,10 @@ export function withPlaywright( for (const [name, dest] of Object.entries(config.destinations)) { if (typeof dest === 'object' && 'type' in dest) { - if (dest.type === '@abapify/adt-playwright' || dest.type === 'playwright') { + if ( + dest.type === '@abapify/adt-playwright' || + dest.type === 'playwright' + ) { destinations[name] = { type: '@abapify/adt-playwright', options: { ...options, ...(dest.options as BrowserAuthOptions) }, @@ -52,9 +61,15 @@ export function withPlaywright( destinations[name] = dest; } } else if (typeof dest === 'string') { - destinations[name] = createPlaywrightDestination({ url: dest, ...options }); + destinations[name] = createPlaywrightDestination({ + url: dest, + ...options, + }); } else { - destinations[name] = createPlaywrightDestination({ ...(dest as BrowserAuthOptions), ...options }); + destinations[name] = createPlaywrightDestination({ + ...(dest as BrowserAuthOptions), + ...options, + }); } } @@ -62,7 +77,12 @@ export function withPlaywright( } // Main exports -export { playwrightAuth, playwright, toCookieHeader, toHeaders } from './playwright-auth'; +export { + playwrightAuth, + playwright, + toCookieHeader, + toHeaders, +} from './playwright-auth'; // AuthManager compatibility exports export { default } from './auth-plugin'; diff --git a/packages/adt-plugin-abapgit/src/lib/abapgit.ts b/packages/adt-plugin-abapgit/src/lib/abapgit.ts index cc5bdd73..b0a81e6c 100644 --- a/packages/adt-plugin-abapgit/src/lib/abapgit.ts +++ b/packages/adt-plugin-abapgit/src/lib/abapgit.ts @@ -27,7 +27,7 @@ function generateAbapGitXml(): string { /** * abapGit Plugin - * + * * Provides import/export of ADK objects to abapGit repository format. */ export const abapGitPlugin: AdtPlugin = createPlugin({ @@ -49,13 +49,13 @@ export const abapGitPlugin: AdtPlugin = createPlugin({ // Note: object.type might be 'DEVC/K' not just 'DEVC' const isPackage = object.type?.startsWith('DEVC'); const objPackage = isPackage - ? object.name - : ((object as any).package || object.name || 'ROOT'); - + ? object.name + : (object as any).package || object.name || 'ROOT'; + // Resolve full package path from SAP (root → ... → current) // This uses ADK to load package hierarchy via super package references const packagePath = await context.resolvePackagePath(objPackage); - + // abapGit PREFIX folder logic: // - Root package (1 element in path): no subfolder, files go directly in src/ // - Child packages: use name with parent prefix stripped @@ -84,7 +84,7 @@ export const abapGitPlugin: AdtPlugin = createPlugin({ const files = await serializer.serializeObjectPublic( object, targetPath, - packageDir + packageDir, ); return { @@ -102,10 +102,10 @@ export const abapGitPlugin: AdtPlugin = createPlugin({ /** * Export abapGit files to SAP - * + * * Reads abapGit format files from FileTree and yields AdkObject instances. * True generator - streams objects one at a time for memory efficiency. - * + * * @param fileTree - Virtual file system abstraction * @param client - ADT client for creating ADK objects */ diff --git a/packages/adt-plugin-abapgit/src/lib/deserializer.ts b/packages/adt-plugin-abapgit/src/lib/deserializer.ts index a2728ed3..01b0269a 100644 --- a/packages/adt-plugin-abapgit/src/lib/deserializer.ts +++ b/packages/adt-plugin-abapgit/src/lib/deserializer.ts @@ -1,9 +1,9 @@ /** * abapGit Deserializer - Export (File → ADK) - * + * * Reads abapGit format files and yields AdkObject instances. * Uses a true generator pattern for memory efficiency. - * + * * Delegates type-specific deserialization to handlers via fromAbapGit(). */ @@ -31,19 +31,20 @@ function parseAbapGitFilename(filename: string): { // Match patterns like: name.type.xml or name.type.suffix.abap const match = filename.match(/^([^.]+)\.([^.]+)(?:\.([^.]+))?\.(\w+)$/); if (!match) return null; - + const [, name, type, suffixOrExt, extension] = match; - + // If 4 parts, middle is suffix; if 3 parts, no suffix if (extension === 'xml' || extension === 'abap') { return { name: name.toUpperCase(), type: type.toUpperCase(), - suffix: suffixOrExt && suffixOrExt !== extension ? suffixOrExt : undefined, + suffix: + suffixOrExt && suffixOrExt !== extension ? suffixOrExt : undefined, extension, }; } - + return null; } @@ -59,41 +60,43 @@ interface ObjectFiles { /** * Deserialize abapGit files to ADK objects - * + * * True generator - yields objects one at a time as they're discovered. - * + * * @param fileTree - Virtual file system to read from * @param client - ADT client for creating ADK objects */ export async function* deserialize( fileTree: FileTree, - client: AdtClient + client: AdtClient, ): AsyncGenerator { // Get ADK factory for creating objects const adk = createAdk(client); - + // Find all XML files (these define the objects) const xmlFiles = await fileTree.glob('**/*.xml'); - + // Filter to supported types and group by object const objectMap = new Map(); - const supportedTypes = new Set(getSupportedTypes().map(t => t.toLowerCase())); - + const supportedTypes = new Set( + getSupportedTypes().map((t) => t.toLowerCase()), + ); + for (const xmlPath of xmlFiles) { // Skip .abapgit.xml metadata file if (xmlPath.endsWith('.abapgit.xml')) continue; - + // Skip package.devc.xml - packages are not deployed, they must exist in target if (xmlPath.endsWith('package.devc.xml')) continue; - + const filename = xmlPath.split('/').pop()!; const parsed = parseAbapGitFilename(filename); - + if (!parsed) continue; if (!supportedTypes.has(parsed.type.toLowerCase())) continue; - + const key = `${parsed.name}:${parsed.type}`; - + if (!objectMap.has(key)) { objectMap.set(key, { name: parsed.name, @@ -101,67 +104,71 @@ export async function* deserialize( sourceFiles: [], }); } - + const obj = objectMap.get(key)!; obj.xmlFile = xmlPath; } - + // Find source files for each object const abapFiles = await fileTree.glob('**/*.abap'); - + for (const abapPath of abapFiles) { const filename = abapPath.split('/').pop()!; const parsed = parseAbapGitFilename(filename); - + if (!parsed) continue; - + const key = `${parsed.name}:${parsed.type}`; const obj = objectMap.get(key); - + if (obj) { obj.sourceFiles.push({ path: abapPath, suffix: parsed.suffix }); } } - + // Process each object and yield for (const [, objFiles] of objectMap) { if (!objFiles.xmlFile) continue; - + const handler = getHandler(objFiles.type); if (!handler) continue; - + try { // Read and parse XML using handler's schema const xmlContent = await fileTree.read(objFiles.xmlFile); const parsed = handler.schema.parse(xmlContent); // Schema parses to { abapGit: { abap: { values: ... } } } const values = (parsed as any)?.abapGit?.abap?.values; - + // Read source files, mapping suffixes using handler's suffixToSourceKey const sources: Record = {}; for (const { path, suffix } of objFiles.sourceFiles) { const content = await fileTree.read(path); // Map suffix to source key using handler's mapping, or use suffix as-is - const sourceKey = suffix + const sourceKey = suffix ? (handler.suffixToSourceKey?.[suffix] ?? suffix) : 'main'; sources[sourceKey] = content; } - + // Get payload from handler (pure data mapping) or build default - const payload = handler.fromAbapGit + const payload: { + name: string; + description?: string; + [key: string]: unknown; + } = handler.fromAbapGit ? handler.fromAbapGit(values) : { name: objFiles.name }; - + // Use filename as fallback if name not in XML (e.g., DEVC) const objectName = payload.name || objFiles.name; - + // Build full data object with name const fullData = { ...payload, name: objectName }; - + // Create ADK object with data (pre-loaded, no need to call load()) const adkObject = adk.getWithData(fullData, objFiles.type) as AdkObject; - + // Set sources on object using handler's setSources method if (Object.keys(sources).length > 0) { if (handler.setSources) { @@ -176,16 +183,19 @@ export async function* deserialize( } } } - + // Store additional payload properties if (payload.description) { (adkObject as any)._pendingDescription = payload.description; } - + yield adkObject; } catch (error) { // Log error but continue with other objects - console.error(`Failed to deserialize ${objFiles.type} ${objFiles.name}:`, error); + console.error( + `Failed to deserialize ${objFiles.type} ${objFiles.name}:`, + error, + ); } } } diff --git a/packages/adt-plugin-abapgit/src/lib/handlers/base.ts b/packages/adt-plugin-abapgit/src/lib/handlers/base.ts index 11cad818..4f601b1a 100644 --- a/packages/adt-plugin-abapgit/src/lib/handlers/base.ts +++ b/packages/adt-plugin-abapgit/src/lib/handlers/base.ts @@ -1,24 +1,29 @@ /** * Handler Factory for abapGit object serialization - * + * * Provides `createHandler` factory for creating object handlers. * Handlers auto-register when created. */ import type { AdkObject, AdkKind } from '@abapify/adk'; import { getTypeForKind } from '@abapify/adk'; -import type { AbapGitSchema, InferAbapGitType, InferValuesType } from './abapgit-schema'; +import type { + AbapGitSchema, + InferAbapGitType, + InferValuesType, +} from './abapgit-schema'; /** * Extract the data type (D) from an AdkObject * This allows us to infer the payload type from the ADK class itself */ -export type InferAdkData = T extends AdkObject ? D : never; +export type InferAdkData = + T extends AdkObject ? D : never; /** * ADK object class type * Used to pass ADK classes to createHandler - * + * * We use `any[]` for constructor args since we only need the static `kind` property, * not to actually instantiate the class. */ @@ -51,13 +56,16 @@ export interface SerializedFile { /** * Handler interface for object serialization/deserialization - * + * * @typeParam T - ADK object type * @typeParam TSchema - AbapGit schema type (provides type-safe values) */ export interface ObjectHandler< T extends AdkObject = AdkObject, - TSchema extends AbapGitSchema = AbapGitSchema + TSchema extends AbapGitSchema = AbapGitSchema< + unknown, + unknown + >, > { /** ABAP object type (e.g., 'CLAS', 'INTF') */ readonly type: AbapObjectType; @@ -69,14 +77,14 @@ export interface ObjectHandler< readonly suffixToSourceKey?: Record; /** Serialize object to files (SAP → Git) */ serialize(object: T): Promise; - /** + /** * Map abapGit values to ADK data (Git → SAP) * Return type includes name (required) plus any ADK data fields */ fromAbapGit?( - values: InferValuesType + values: InferValuesType, ): Partial> & { name: string }; - + /** * Set source files on ADK object during deserialization (Git → SAP) * Symmetric counterpart to getSources @@ -87,7 +95,11 @@ export interface ObjectHandler< /** * Re-export AbapGitSchema types for handler definitions */ -export type { AbapGitSchema, InferAbapGitType, InferValuesType } from './abapgit-schema'; +export type { + AbapGitSchema, + InferAbapGitType, + InferValuesType, +} from './abapgit-schema'; // ============================================ // Global Handler Registry @@ -141,103 +153,116 @@ export interface ObjectPayload { /** * Handler definition passed to createHandler - * + * * @typeParam T - ADK object type * @typeParam TSchema - The AbapGit schema (provides both full type and values type) */ export interface HandlerDefinition< - T extends AdkObject, - TSchema extends AbapGitSchema = AbapGitSchema + T extends AdkObject, + TSchema extends AbapGitSchema = AbapGitSchema< + unknown, + unknown + >, > { /** AbapGit typed schema for XML generation */ schema: TSchema; - + /** abapGit format version */ version: string; - + /** Serializer class name (e.g., 'LCL_OBJECT_DEVC') */ serializer: string; - + /** Serializer version */ serializer_version: string; - - /** + + /** * Map ADK object to abapGit values (inner content only) * The base class wraps this in the full AbapGitType structure */ toAbapGit(object: T): InferValuesType; - + /** * Map abapGit values to ADK data (optional) * Symmetric counterpart to toAbapGit - used for export (Git → SAP) - * + * * @param values - Parsed abapGit values (same type as toAbapGit returns) * @returns Partial ADK data with name for deserialization */ fromAbapGit?( - values: InferValuesType + values: InferValuesType, ): Partial> & { name: string }; - + /** * Map abapGit file suffix to source key (for objects with multiple sources) * Used during deserialization to map file suffixes to source keys - * + * * @example For CLAS: { 'locals_def': 'definitions', 'testclasses': 'testclasses' } */ suffixToSourceKey?: Record; - - /** + + /** * Custom filename for XML file (optional) * Default: `${objectName}.${type}.xml` - * + * * @example 'package.devc.xml' for DEVC which doesn't use object name */ - xmlFileName?: string | ((object: T, ctx: HandlerContext>) => string); - + xmlFileName?: + | string + | (( + object: T, + ctx: HandlerContext>, + ) => string); + /** * Get source code from object (optional) * If provided, default serialize will create both .abap and .xml files - * + * * @example getSource: (obj) => obj.getSource() */ getSource?(object: T): Promise; - + /** * Get multiple source files from object (optional) * For objects with multiple source files (e.g., CLAS with includes) * Returns array of { suffix?, content } or promises - resolved automatically - * + * * @example getSources: (cls) => cls.includes.map((inc) => ({ * suffix: SUFFIX_MAP[inc.includeType], * content: cls.getIncludeSource(inc.includeType), * })) */ - getSources?(object: T): Array<{ suffix?: string; content: string | Promise }>; - + getSources?( + object: T, + ): Array<{ suffix?: string; content: string | Promise }>; + /** * Set source files on ADK object during deserialization (Git → SAP) * Symmetric counterpart to getSources - * + * * @param object - ADK object to set sources on * @param sources - Source files keyed by source key (e.g., { main: '...', testclasses: '...' }) - * + * * @example setSources: (cls, sources) => { * if (sources.main) cls.setSource(sources.main); * if (sources.testclasses) cls.setIncludeSource('testclasses', sources.testclasses); * } */ setSources?(object: T, sources: Record): void; - - /** + + /** * Serialize object to files (optional) * Default behavior: * - If getSources provided: creates multiple .abap + .xml files * - If getSource provided: creates single .abap + .xml files * - Otherwise: creates only .xml file - * + * * Override only for very custom serialization logic */ - serialize?(object: T, ctx: HandlerContext>): Promise; + serialize?( + object: T, + ctx: HandlerContext>, + ): Promise; } /** @@ -248,66 +273,92 @@ export interface HandlerContext { readonly type: AbapObjectType; /** File extension (lowercase type) */ readonly fileExtension: string; - + /** Get object name in lowercase */ getObjectName(object: T): string; /** Get object data synchronously */ getData(object: T): Record; /** Resolve lazy content */ resolveContent(content: unknown): Promise; - + /** Convert to abapGit XML using schema */ toAbapGitXml(object: T): string; - + /** Create a file entry */ - createFile(path: string, content: string, encoding?: BufferEncoding): SerializedFile; + createFile( + path: string, + content: string, + encoding?: BufferEncoding, + ): SerializedFile; /** Create XML metadata file */ createXmlFile(objectName: string, xmlContent: string): SerializedFile; /** Create ABAP source file */ - createAbapFile(objectName: string, content: string, suffix?: string): SerializedFile; + createAbapFile( + objectName: string, + content: string, + suffix?: string, + ): SerializedFile; } /** * Create an object handler from ADK class */ -export function createHandler = AbapGitSchema>( +export function createHandler< + T extends AdkObject, + TSchema extends AbapGitSchema = AbapGitSchema< + unknown, + unknown + >, +>( adkClass: AdkObjectClass, - definition: HandlerDefinition + definition: HandlerDefinition, ): ObjectHandler; /** * Create an object handler from ABAP type string * Use this for object types without ADK class (e.g., DTEL, DOMA) */ -export function createHandler = AbapGitSchema>( +export function createHandler< + T extends AdkObject = AdkObject, + TSchema extends AbapGitSchema = AbapGitSchema< + unknown, + unknown + >, +>( type: AbapObjectType, - definition: HandlerDefinition + definition: HandlerDefinition, ): ObjectHandler; /** * Create an object handler - * + * * @param adkClassOrType - ADK object class or ABAP type string * @param definition - Handler definition with schema, toAbapGit, serialize * @returns ObjectHandler that is auto-registered - * + * * @example * ```typescript * // With ADK class (preferred) * import { AdkPackage } from '@abapify/adk'; * export const packageHandler = createHandler(AdkPackage, { ... }); - * + * * // With ABAP type string (for objects without ADK class) * export const dataElementHandler = createHandler('DTEL', { ... }); * ``` */ -export function createHandler = AbapGitSchema>( +export function createHandler< + T extends AdkObject, + TSchema extends AbapGitSchema = AbapGitSchema< + unknown, + unknown + >, +>( adkClassOrType: AdkObjectClass | AbapObjectType, - definition: HandlerDefinition + definition: HandlerDefinition, ): ObjectHandler { // Determine ABAP type let type: AbapObjectType; - + if (typeof adkClassOrType === 'string') { // Direct ABAP type string type = adkClassOrType; @@ -316,37 +367,39 @@ export function createHandler> = { type, fileExtension, - + getObjectName(object: T): string { return object.name.toLowerCase(); }, - + getData(object: T): Record { return object.dataSync as Record; }, - + async resolveContent(content: unknown): Promise { if (!content) return ''; if (typeof content === 'string') return content; if (typeof content === 'function') return await content(); return ''; }, - + toAbapGitXml(object: T): string { // Get values from handler const values = definition.toAbapGit(object); - + // Construct full AbapGitType payload const fullPayload = { abap: { @@ -356,32 +409,43 @@ export function createHandler; - + // Build XML with pretty formatting for readability return definition.schema.build(fullPayload, { pretty: true }); }, - - createFile(path: string, content: string, encoding?: BufferEncoding): SerializedFile { + + createFile( + path: string, + content: string, + encoding?: BufferEncoding, + ): SerializedFile { return { path, content, encoding }; }, - + createXmlFile(objectName: string, xmlContent: string): SerializedFile { - return { path: `${objectName}.${fileExtension}.xml`, content: xmlContent }; + return { + path: `${objectName}.${fileExtension}.xml`, + content: xmlContent, + }; }, - - createAbapFile(objectName: string, content: string, suffix?: string): SerializedFile { + + createAbapFile( + objectName: string, + content: string, + suffix?: string, + ): SerializedFile { const fileName = suffix ? `${objectName}.${fileExtension}.${suffix}.abap` : `${objectName}.${fileExtension}.abap`; return { path: fileName, content }; }, }; - + // Default serialize const defaultSerialize = async (object: T): Promise => { const objectName = ctx.getObjectName(object); const files: SerializedFile[] = []; - + // Add source files if (definition.getSources) { // Multiple source files (e.g., CLAS with includes) @@ -391,7 +455,7 @@ export function createHandler ({ suffix, content: await content, - })) + })), ); for (const { suffix, content } of sources) { if (content) { @@ -403,25 +467,28 @@ export function createHandler): Partial> & { name: string } => { + ? ( + values: InferValuesType, + ): Partial> & { name: string } => { return definition.fromAbapGit!(values); } : undefined; @@ -432,15 +499,15 @@ export function createHandler definition.serialize!(object, ctx) : defaultSerialize, fromAbapGit: defaultFromAbapGit, setSources: definition.setSources, }; - + // Auto-register (cast to base type for registry storage) handlerRegistry.set(type, handler as ObjectHandler); - + return handler; } diff --git a/packages/adt-plugin-abapgit/src/lib/handlers/index.ts b/packages/adt-plugin-abapgit/src/lib/handlers/index.ts index 3ad1983b..9412aa80 100644 --- a/packages/adt-plugin-abapgit/src/lib/handlers/index.ts +++ b/packages/adt-plugin-abapgit/src/lib/handlers/index.ts @@ -1,15 +1,15 @@ /** * abapGit Handler System - * + * * Use `createHandler` factory to create handlers. * Handlers auto-register when created. */ // Export factory and types export { createHandler } from './base'; -export type { - SerializedFile, - ObjectHandler, +export type { + SerializedFile, + ObjectHandler, AbapObjectType, HandlerDefinition, HandlerContext, diff --git a/packages/adt-plugin-abapgit/src/lib/handlers/objects/clas.ts b/packages/adt-plugin-abapgit/src/lib/handlers/objects/clas.ts index 63b1408a..c08c23b8 100644 --- a/packages/adt-plugin-abapgit/src/lib/handlers/objects/clas.ts +++ b/packages/adt-plugin-abapgit/src/lib/handlers/objects/clas.ts @@ -26,23 +26,23 @@ const ABAPGIT_SUFFIX: Record = { const SUFFIX_TO_SOURCE_KEY = Object.fromEntries( Object.entries(ABAPGIT_SUFFIX) .filter(([, suffix]) => suffix !== undefined) - .map(([key, suffix]) => [suffix, key]) + .map(([key, suffix]) => [suffix, key]), ) as Record; /** * Map visibility to EXPOSURE code (ADK → abapGit) */ const VISIBILITY_TO_EXPOSURE: Record = { - 'private': '0', - 'protected': '1', - 'public': '2', + private: '0', + protected: '1', + public: '2', }; /** * Reverse mapping: EXPOSURE code to visibility (abapGit → ADK) */ const EXPOSURE_TO_VISIBILITY = Object.fromEntries( - Object.entries(VISIBILITY_TO_EXPOSURE).map(([k, v]) => [v, k]) + Object.entries(VISIBILITY_TO_EXPOSURE).map(([k, v]) => [v, k]), ) as Record; export const classHandler = createHandler(AdkClass, { @@ -50,43 +50,46 @@ export const classHandler = createHandler(AdkClass, { version: 'v1.0.0', serializer: 'LCL_OBJECT_CLAS', serializer_version: 'v1.0.0', - + // Reverse mapping for deserialization (Git → SAP) suffixToSourceKey: SUFFIX_TO_SOURCE_KEY, toAbapGit: (cls) => { - const includes = cls.data.include ?? []; - const hasTestClasses = includes.some((inc) => inc.includeType === 'testclasses'); + const data = cls.dataSync; + const includes = data.include ?? []; + const hasTestClasses = includes.some( + (inc) => String(inc.includeType) === 'testclasses', + ); return { VSEOCLASS: { // Required CLSNAME: cls.name ?? '', - + // Basic metadata - LANGU: cls.data.language ?? 'E', - DESCRIPT: cls.data.description ?? '', + LANGU: data.language ?? 'E', + DESCRIPT: data.description ?? '', STATE: '1', // Active - - // Class attributes - access via data.* - CATEGORY: cls.data.category ?? '00', - EXPOSURE: VISIBILITY_TO_EXPOSURE[cls.data.visibility ?? 'public'] ?? '2', - CLSFINAL: cls.data.final ? 'X' : undefined, - CLSABSTRCT: cls.data.abstract ? 'X' : undefined, - SHRM_ENABLED: cls.data.sharedMemoryEnabled ? 'X' : undefined, - + + // Class attributes - access via dataSync.* + CATEGORY: data.category ?? '00', + EXPOSURE: VISIBILITY_TO_EXPOSURE[data.visibility ?? 'public'] ?? '2', + CLSFINAL: data.final ? 'X' : undefined, + CLSABSTRCT: data.abstract ? 'X' : undefined, + SHRM_ENABLED: data.sharedMemoryEnabled ? 'X' : undefined, + // Source attributes CLSCCINCL: 'X', // Class constructor include - FIXPT: cls.data.fixPointArithmetic ? 'X' : undefined, - UNICODE: cls.data.activeUnicodeCheck ? 'X' : undefined, - + FIXPT: data.fixPointArithmetic ? 'X' : undefined, + UNICODE: data.activeUnicodeCheck ? 'X' : undefined, + // References - REFCLSNAME: cls.data.superClassRef?.name, - MSG_ID: cls.data.messageClassRef?.name, - + REFCLSNAME: data.superClassRef?.name, + MSG_ID: data.messageClassRef?.name, + // ABAP language version - ABAP_LANGUAGE_VERSION: cls.data.abapLanguageVersion, - + ABAP_LANGUAGE_VERSION: data.abapLanguageVersion, + // Test classes flag ...(hasTestClasses ? { WITH_UNIT_TESTS: 'X' } : {}), }, @@ -94,10 +97,13 @@ export const classHandler = createHandler(AdkClass, { }, getSources: (cls) => { - const includes = cls.data.include ?? []; + const includes = cls.dataSync.include ?? []; return includes.map((inc) => ({ - suffix: ABAPGIT_SUFFIX[inc.includeType as ClassIncludeType], - content: cls.getIncludeSource(inc.includeType as ClassIncludeType), + suffix: + ABAPGIT_SUFFIX[String(inc.includeType ?? 'main') as ClassIncludeType], + content: cls.getIncludeSource( + String(inc.includeType ?? 'main') as ClassIncludeType, + ), })); }, @@ -106,38 +112,43 @@ export const classHandler = createHandler(AdkClass, { // Required - uppercase for SAP name: (VSEOCLASS?.CLSNAME ?? '').toUpperCase(), type: 'CLAS/OC', // ADT object type - - // Basic metadata - description: VSEOCLASS?.DESCRIPT, - language: VSEOCLASS?.LANGU, - - // Class attributes - category: VSEOCLASS?.CATEGORY, - final: VSEOCLASS?.CLSFINAL === 'X', - abstract: VSEOCLASS?.CLSABSTRCT === 'X', - visibility: EXPOSURE_TO_VISIBILITY[VSEOCLASS?.EXPOSURE ?? '2'] ?? 'public', - sharedMemoryEnabled: VSEOCLASS?.SHRM_ENABLED === 'X', - - // Source attributes - fixPointArithmetic: VSEOCLASS?.FIXPT === 'X', - activeUnicodeCheck: VSEOCLASS?.UNICODE === 'X', - - // References (name only - URI resolved by ADK) - superClassRef: VSEOCLASS?.REFCLSNAME ? { name: VSEOCLASS.REFCLSNAME } : undefined, - messageClassRef: VSEOCLASS?.MSG_ID ? { name: VSEOCLASS.MSG_ID } : undefined, - + + // Basic metadata + description: VSEOCLASS?.DESCRIPT, + language: VSEOCLASS?.LANGU, + + // Class attributes + category: VSEOCLASS?.CATEGORY, + final: VSEOCLASS?.CLSFINAL === 'X', + abstract: VSEOCLASS?.CLSABSTRCT === 'X', + visibility: EXPOSURE_TO_VISIBILITY[VSEOCLASS?.EXPOSURE ?? '2'] ?? 'public', + sharedMemoryEnabled: VSEOCLASS?.SHRM_ENABLED === 'X', + + // Source attributes + fixPointArithmetic: VSEOCLASS?.FIXPT === 'X', + activeUnicodeCheck: VSEOCLASS?.UNICODE === 'X', + + // References (name only - URI resolved by ADK) + superClassRef: VSEOCLASS?.REFCLSNAME + ? { name: VSEOCLASS.REFCLSNAME } + : undefined, + messageClassRef: VSEOCLASS?.MSG_ID ? { name: VSEOCLASS.MSG_ID } : undefined, + // ABAP language version abapLanguageVersion: VSEOCLASS?.ABAP_LANGUAGE_VERSION, }), - + // Git → SAP: Set source files on ADK object (symmetric with getSources) // Stores sources as pending for later deploy via ADT setSources: (cls, sources) => { // Store all sources as pending (will be saved during deploy) - (cls as unknown as { _pendingSources: Record })._pendingSources = sources; + ( + cls as unknown as { _pendingSources: Record } + )._pendingSources = sources; // Also set main source shortcut for simple access if (sources.main) { - (cls as unknown as { _pendingSource: string })._pendingSource = sources.main; + (cls as unknown as { _pendingSource: string })._pendingSource = + sources.main; } }, }); diff --git a/packages/adt-plugin-abapgit/src/lib/handlers/objects/index.ts b/packages/adt-plugin-abapgit/src/lib/handlers/objects/index.ts index f6f4521d..145391f1 100644 --- a/packages/adt-plugin-abapgit/src/lib/handlers/objects/index.ts +++ b/packages/adt-plugin-abapgit/src/lib/handlers/objects/index.ts @@ -1,10 +1,10 @@ /** * abapGit Object Handlers - * + * * Each handler implements the ObjectHandler interface for a specific ABAP object type. */ export { classHandler } from './clas'; export { interfaceHandler } from './intf'; export { packageHandler } from './devc'; -// TODO: Add domainHandler and dataElementHandler when ADK v2 support is ready +// NOTE: Add domainHandler and dataElementHandler when ADK v2 support is ready diff --git a/packages/adt-plugin-abapgit/src/lib/handlers/objects/intf.ts b/packages/adt-plugin-abapgit/src/lib/handlers/objects/intf.ts index 808fd23d..825d9b0f 100644 --- a/packages/adt-plugin-abapgit/src/lib/handlers/objects/intf.ts +++ b/packages/adt-plugin-abapgit/src/lib/handlers/objects/intf.ts @@ -31,12 +31,13 @@ export const interfaceHandler = createHandler(AdkInterface, { type: 'INTF/OI', // ADT object type description: VSEOINTERF?.DESCRIPT, }), - + // Git → SAP: Set source files on ADK object (symmetric with getSource) // Stores sources as pending for later deploy via ADT setSources: (intf, sources) => { if (sources.main) { - (intf as unknown as { _pendingSource: string })._pendingSource = sources.main; + (intf as unknown as { _pendingSource: string })._pendingSource = + sources.main; } }, }); diff --git a/packages/adt-plugin-abapgit/src/schemas/generated/index.ts b/packages/adt-plugin-abapgit/src/schemas/generated/index.ts index ee7e1b69..2e29e858 100644 --- a/packages/adt-plugin-abapgit/src/schemas/generated/index.ts +++ b/packages/adt-plugin-abapgit/src/schemas/generated/index.ts @@ -1,8 +1,8 @@ /** * AbapGit Typed Schemas - * + * * Auto-generated by ts-xsd codegen - DO NOT EDIT - * + * * Each schema provides: * - _type: Full AbapGitType (for XML build/parse) * - _values: Inner values type (for handler mapping) @@ -36,11 +36,31 @@ type DtelAbapGitType = Extract<_DtelSchema, { abapGit: unknown }>; type IntfAbapGitType = Extract<_IntfSchema, { abapGit: unknown }>; // AbapGit schema instances - using flattened types with values extracted from abapGit.abap.values -export const clas = abapGitSchema(_clas); -export const devc = abapGitSchema(_devc); -export const doma = abapGitSchema(_doma); -export const dtel = abapGitSchema(_dtel); -export const intf = abapGitSchema(_intf); +export const clas = abapGitSchema< + ClasAbapGitType, + ClasAbapGitType['abapGit']['abap']['values'] +>(_clas); +export const devc = abapGitSchema< + DevcAbapGitType, + DevcAbapGitType['abapGit']['abap']['values'] +>(_devc); +export const doma = abapGitSchema< + DomaAbapGitType, + DomaAbapGitType['abapGit']['abap']['values'] +>(_doma); +export const dtel = abapGitSchema< + DtelAbapGitType, + DtelAbapGitType['abapGit']['abap']['values'] +>(_dtel); +export const intf = abapGitSchema< + IntfAbapGitType, + IntfAbapGitType['abapGit']['abap']['values'] +>(_intf); // Re-export types and utilities -export { abapGitSchema, type AbapGitSchema, type InferAbapGitType, type InferValuesType } from '../../lib/handlers/abapgit-schema'; +export { + abapGitSchema, + type AbapGitSchema, + type InferAbapGitType, + type InferValuesType, +} from '../../lib/handlers/abapgit-schema'; diff --git a/packages/adt-plugin-abapgit/src/schemas/generated/types/clas.ts b/packages/adt-plugin-abapgit/src/schemas/generated/types/clas.ts index 7dac1bd7..5c663d5e 100644 --- a/packages/adt-plugin-abapgit/src/schemas/generated/types/clas.ts +++ b/packages/adt-plugin-abapgit/src/schemas/generated/types/clas.ts @@ -5,61 +5,63 @@ * Mode: Flattened */ -export type ClasSchema = { - abapGit: { +export type ClasSchema = + | { + abapGit: { abap: { - values: { - VSEOCLASS?: { - CLSNAME: string; - LANGU?: string; - DESCRIPT?: string; - STATE?: string; - CATEGORY?: string; - EXPOSURE?: string; - CLSFINAL?: string; - CLSABSTRCT?: string; - CLSCCINCL?: string; - FIXPT?: string; - UNICODE?: string; - WITH_UNIT_TESTS?: string; - DURATION?: string; - RISK?: string; - MSG_ID?: string; - REFCLSNAME?: string; - SHRM_ENABLED?: string; - ABAP_LANGUAGE_VERSION?: string; - }; + values: { + VSEOCLASS?: { + CLSNAME: string; + LANGU?: string; + DESCRIPT?: string; + STATE?: string; + CATEGORY?: string; + EXPOSURE?: string; + CLSFINAL?: string; + CLSABSTRCT?: string; + CLSCCINCL?: string; + FIXPT?: string; + UNICODE?: string; + WITH_UNIT_TESTS?: string; + DURATION?: string; + RISK?: string; + MSG_ID?: string; + REFCLSNAME?: string; + SHRM_ENABLED?: string; + ABAP_LANGUAGE_VERSION?: string; }; - version?: string; + }; + version?: string; }; version: string; serializer: string; serializer_version: string; - }; -} | { - abap: { + }; + } + | { + abap: { values: { - VSEOCLASS?: { - CLSNAME: string; - LANGU?: string; - DESCRIPT?: string; - STATE?: string; - CATEGORY?: string; - EXPOSURE?: string; - CLSFINAL?: string; - CLSABSTRCT?: string; - CLSCCINCL?: string; - FIXPT?: string; - UNICODE?: string; - WITH_UNIT_TESTS?: string; - DURATION?: string; - RISK?: string; - MSG_ID?: string; - REFCLSNAME?: string; - SHRM_ENABLED?: string; - ABAP_LANGUAGE_VERSION?: string; - }; + VSEOCLASS?: { + CLSNAME: string; + LANGU?: string; + DESCRIPT?: string; + STATE?: string; + CATEGORY?: string; + EXPOSURE?: string; + CLSFINAL?: string; + CLSABSTRCT?: string; + CLSCCINCL?: string; + FIXPT?: string; + UNICODE?: string; + WITH_UNIT_TESTS?: string; + DURATION?: string; + RISK?: string; + MSG_ID?: string; + REFCLSNAME?: string; + SHRM_ENABLED?: string; + ABAP_LANGUAGE_VERSION?: string; + }; }; version?: string; + }; }; -}; diff --git a/packages/adt-plugin-abapgit/src/schemas/generated/types/devc.ts b/packages/adt-plugin-abapgit/src/schemas/generated/types/devc.ts index 4867e036..03dacb17 100644 --- a/packages/adt-plugin-abapgit/src/schemas/generated/types/devc.ts +++ b/packages/adt-plugin-abapgit/src/schemas/generated/types/devc.ts @@ -5,27 +5,29 @@ * Mode: Flattened */ -export type DevcSchema = { - abapGit: { +export type DevcSchema = + | { + abapGit: { abap: { - values: { - DEVC?: { - CTEXT: string; - }; + values: { + DEVC?: { + CTEXT: string; }; - version?: string; + }; + version?: string; }; version: string; serializer: string; serializer_version: string; - }; -} | { - abap: { + }; + } + | { + abap: { values: { - DEVC?: { - CTEXT: string; - }; + DEVC?: { + CTEXT: string; + }; }; version?: string; + }; }; -}; diff --git a/packages/adt-plugin-abapgit/src/schemas/generated/types/doma.ts b/packages/adt-plugin-abapgit/src/schemas/generated/types/doma.ts index d00957da..b9f994af 100644 --- a/packages/adt-plugin-abapgit/src/schemas/generated/types/doma.ts +++ b/packages/adt-plugin-abapgit/src/schemas/generated/types/doma.ts @@ -5,71 +5,73 @@ * Mode: Flattened */ -export type DomaSchema = { - abapGit: { +export type DomaSchema = + | { + abapGit: { abap: { - values: { - DD01V?: { - DOMNAME: string; - DDLANGUAGE?: string; - DATATYPE?: string; - LENG?: string; - OUTPUTLEN?: string; - DECIMALS?: string; - LOWERCASE?: string; - SIGNFLAG?: string; - VALEXI?: string; - ENTITYTAB?: string; - CONVEXIT?: string; - DDTEXT?: string; - DOMMASTER?: string; - }; - DD07V_TAB?: { - DD07V?: { - DOMNAME?: string; - VALPOS?: string; - DDLANGUAGE?: string; - DOMVALUE_L?: string; - DOMVALUE_H?: string; - DDTEXT?: string; - }[]; - }; + values: { + DD01V?: { + DOMNAME: string; + DDLANGUAGE?: string; + DATATYPE?: string; + LENG?: string; + OUTPUTLEN?: string; + DECIMALS?: string; + LOWERCASE?: string; + SIGNFLAG?: string; + VALEXI?: string; + ENTITYTAB?: string; + CONVEXIT?: string; + DDTEXT?: string; + DOMMASTER?: string; + }; + DD07V_TAB?: { + DD07V?: { + DOMNAME?: string; + VALPOS?: string; + DDLANGUAGE?: string; + DOMVALUE_L?: string; + DOMVALUE_H?: string; + DDTEXT?: string; + }[]; }; - version?: string; + }; + version?: string; }; version: string; serializer: string; serializer_version: string; - }; -} | { - abap: { + }; + } + | { + abap: { values: { - DD01V?: { - DOMNAME: string; - DDLANGUAGE?: string; - DATATYPE?: string; - LENG?: string; - OUTPUTLEN?: string; - DECIMALS?: string; - LOWERCASE?: string; - SIGNFLAG?: string; - VALEXI?: string; - ENTITYTAB?: string; - CONVEXIT?: string; - DDTEXT?: string; - DOMMASTER?: string; - }; - DD07V_TAB?: { - DD07V?: { - DOMNAME?: string; - VALPOS?: string; - DDLANGUAGE?: string; - DOMVALUE_L?: string; - DOMVALUE_H?: string; - DDTEXT?: string; - }[]; - }; + DD01V?: { + DOMNAME: string; + DDLANGUAGE?: string; + DATATYPE?: string; + LENG?: string; + OUTPUTLEN?: string; + DECIMALS?: string; + LOWERCASE?: string; + SIGNFLAG?: string; + VALEXI?: string; + ENTITYTAB?: string; + CONVEXIT?: string; + DDTEXT?: string; + DOMMASTER?: string; + }; + DD07V_TAB?: { + DD07V?: { + DOMNAME?: string; + VALPOS?: string; + DDLANGUAGE?: string; + DOMVALUE_L?: string; + DOMVALUE_H?: string; + DDTEXT?: string; + }[]; + }; }; version?: string; + }; }; -}; diff --git a/packages/adt-plugin-abapgit/src/schemas/generated/types/dtel.ts b/packages/adt-plugin-abapgit/src/schemas/generated/types/dtel.ts index 06ba51af..0f91a76f 100644 --- a/packages/adt-plugin-abapgit/src/schemas/generated/types/dtel.ts +++ b/packages/adt-plugin-abapgit/src/schemas/generated/types/dtel.ts @@ -5,61 +5,63 @@ * Mode: Flattened */ -export type DtelSchema = { - abapGit: { +export type DtelSchema = + | { + abapGit: { abap: { - values: { - DD04V?: { - ROLLNAME: string; - DDLANGUAGE?: string; - DDTEXT?: string; - DOMNAME?: string; - DATATYPE?: string; - LENG?: string; - DECIMALS?: string; - HEADLEN?: string; - SCRLEN1?: string; - SCRLEN2?: string; - SCRLEN3?: string; - REPTEXT?: string; - SCRTEXT_S?: string; - SCRTEXT_M?: string; - SCRTEXT_L?: string; - DTELMASTER?: string; - REFKIND?: string; - ABAP_LANGUAGE_VERSION?: string; - }; + values: { + DD04V?: { + ROLLNAME: string; + DDLANGUAGE?: string; + DDTEXT?: string; + DOMNAME?: string; + DATATYPE?: string; + LENG?: string; + DECIMALS?: string; + HEADLEN?: string; + SCRLEN1?: string; + SCRLEN2?: string; + SCRLEN3?: string; + REPTEXT?: string; + SCRTEXT_S?: string; + SCRTEXT_M?: string; + SCRTEXT_L?: string; + DTELMASTER?: string; + REFKIND?: string; + ABAP_LANGUAGE_VERSION?: string; }; - version?: string; + }; + version?: string; }; version: string; serializer: string; serializer_version: string; - }; -} | { - abap: { + }; + } + | { + abap: { values: { - DD04V?: { - ROLLNAME: string; - DDLANGUAGE?: string; - DDTEXT?: string; - DOMNAME?: string; - DATATYPE?: string; - LENG?: string; - DECIMALS?: string; - HEADLEN?: string; - SCRLEN1?: string; - SCRLEN2?: string; - SCRLEN3?: string; - REPTEXT?: string; - SCRTEXT_S?: string; - SCRTEXT_M?: string; - SCRTEXT_L?: string; - DTELMASTER?: string; - REFKIND?: string; - ABAP_LANGUAGE_VERSION?: string; - }; + DD04V?: { + ROLLNAME: string; + DDLANGUAGE?: string; + DDTEXT?: string; + DOMNAME?: string; + DATATYPE?: string; + LENG?: string; + DECIMALS?: string; + HEADLEN?: string; + SCRLEN1?: string; + SCRLEN2?: string; + SCRLEN3?: string; + REPTEXT?: string; + SCRTEXT_S?: string; + SCRTEXT_M?: string; + SCRTEXT_L?: string; + DTELMASTER?: string; + REFKIND?: string; + ABAP_LANGUAGE_VERSION?: string; + }; }; version?: string; + }; }; -}; diff --git a/packages/adt-plugin-abapgit/src/schemas/generated/types/intf.ts b/packages/adt-plugin-abapgit/src/schemas/generated/types/intf.ts index 7d9c1b1a..25024e7d 100644 --- a/packages/adt-plugin-abapgit/src/schemas/generated/types/intf.ts +++ b/packages/adt-plugin-abapgit/src/schemas/generated/types/intf.ts @@ -5,39 +5,41 @@ * Mode: Flattened */ -export type IntfSchema = { - abapGit: { +export type IntfSchema = + | { + abapGit: { abap: { - values: { - VSEOINTERF?: { - CLSNAME: string; - LANGU?: string; - DESCRIPT?: string; - EXPOSURE?: string; - STATE?: string; - UNICODE?: string; - ABAP_LANGUAGE_VERSION?: string; - }; + values: { + VSEOINTERF?: { + CLSNAME: string; + LANGU?: string; + DESCRIPT?: string; + EXPOSURE?: string; + STATE?: string; + UNICODE?: string; + ABAP_LANGUAGE_VERSION?: string; }; - version?: string; + }; + version?: string; }; version: string; serializer: string; serializer_version: string; - }; -} | { - abap: { + }; + } + | { + abap: { values: { - VSEOINTERF?: { - CLSNAME: string; - LANGU?: string; - DESCRIPT?: string; - EXPOSURE?: string; - STATE?: string; - UNICODE?: string; - ABAP_LANGUAGE_VERSION?: string; - }; + VSEOINTERF?: { + CLSNAME: string; + LANGU?: string; + DESCRIPT?: string; + EXPOSURE?: string; + STATE?: string; + UNICODE?: string; + ABAP_LANGUAGE_VERSION?: string; + }; }; version?: string; + }; }; -}; diff --git a/packages/adt-plugin-abapgit/tests/deserializer.test.ts b/packages/adt-plugin-abapgit/tests/deserializer.test.ts index cc49c7ed..2c3e1afa 100644 --- a/packages/adt-plugin-abapgit/tests/deserializer.test.ts +++ b/packages/adt-plugin-abapgit/tests/deserializer.test.ts @@ -11,7 +11,7 @@ import * as path from 'path'; // Mock FileTree that reads from fixtures directory function createMockFileTree(fixturesDir: string): FileTree { const files = new Map(); - + // Recursively collect all files function collectFiles(dir: string, prefix = '') { const entries = fs.readdirSync(dir, { withFileTypes: true }); @@ -25,31 +25,27 @@ function createMockFileTree(fixturesDir: string): FileTree { } } } - + collectFiles(fixturesDir); - + // Simple glob implementation for testing function matchGlob(pattern: string, filePath: string): boolean { // Handle **/*.xml pattern - should match both dir/file.xml and file.xml if (pattern.startsWith('**/')) { const suffix = pattern.slice(3); // Remove **/ - const suffixRegex = suffix - .replace(/\./g, '\\.') - .replace(/\*/g, '[^/]*'); + const suffixRegex = suffix.replace(/\./g, '\\.').replace(/\*/g, '[^/]*'); // Match either at root or in any subdirectory return new RegExp(`^(.*\\/)?${suffixRegex}$`).test(filePath); } // Simple * glob - const regexPattern = pattern - .replace(/\./g, '\\.') - .replace(/\*/g, '[^/]*'); + const regexPattern = pattern.replace(/\./g, '\\.').replace(/\*/g, '[^/]*'); return new RegExp(`^${regexPattern}$`).test(filePath); } - + return { root: fixturesDir, glob: async (pattern: string) => { - return Array.from(files.keys()).filter(f => matchGlob(pattern, f)); + return Array.from(files.keys()).filter((f) => matchGlob(pattern, f)); }, read: async (filePath: string) => { const content = files.get(filePath); @@ -82,59 +78,59 @@ const mockClient = {} as any; describe('deserializer', () => { const fixturesDir = path.join(__dirname, 'fixtures'); - + it('should deserialize CLAS from fixture', async () => { // Create FileTree with just the clas fixture const fileTree = createMockFileTree(path.join(fixturesDir, 'clas')); - + const objects = []; for await (const obj of deserialize(fileTree, mockClient)) { objects.push(obj); } - + expect(objects).toHaveLength(1); expect(objects[0].name).toBe('ZCL_AGE_SAMPLE_CLASS'); // kind returns human-readable name, not type code expect(objects[0].kind).toBe('Class'); }); - + it('should deserialize INTF from fixture', async () => { const fileTree = createMockFileTree(path.join(fixturesDir, 'intf')); - + const objects = []; for await (const obj of deserialize(fileTree, mockClient)) { objects.push(obj); } - + expect(objects).toHaveLength(1); expect(objects[0].name).toBe('ZIF_AGE_TEST'); expect(objects[0].kind).toBe('Interface'); }); - + it('should deserialize DEVC from fixture', async () => { const fileTree = createMockFileTree(path.join(fixturesDir, 'devc')); - + const objects = []; for await (const obj of deserialize(fileTree, mockClient)) { objects.push(obj); } - + expect(objects).toHaveLength(1); // DEVC name comes from filename (uppercase) since it's not in XML expect(objects[0].name).toBe('PACKAGE'); expect(objects[0].kind).toBe('Package'); }); - + it('should deserialize multiple objects from mixed fixtures', async () => { const fileTree = createMockFileTree(fixturesDir); - + const objects = []; for await (const obj of deserialize(fileTree, mockClient)) { objects.push(obj); } - + // Should have CLAS, INTF, DEVC (DOMA and DTEL don't have handlers yet) - const kinds = objects.map(o => o.kind); + const kinds = objects.map((o) => o.kind); expect(kinds).toContain('Class'); expect(kinds).toContain('Interface'); expect(kinds).toContain('Package'); diff --git a/packages/adt-plugin-abapgit/tests/handlers/base.test.ts b/packages/adt-plugin-abapgit/tests/handlers/base.test.ts index c49a9222..599fb596 100644 --- a/packages/adt-plugin-abapgit/tests/handlers/base.test.ts +++ b/packages/adt-plugin-abapgit/tests/handlers/base.test.ts @@ -4,15 +4,24 @@ import { describe, it } from 'node:test'; import assert from 'node:assert'; -import { createHandler, getHandler, getSupportedTypes } from '../../src/lib/handlers/base.ts'; +import { + createHandler, + getHandler, + getSupportedTypes, +} from '../../src/lib/handlers/base.ts'; describe('createHandler factory', () => { it('creates handler with string type', () => { // Use a mock schema with build method - const mockSchema = { build: (data: unknown) => `${JSON.stringify(data)}` }; - + const mockSchema = { + build: (data: unknown) => `${JSON.stringify(data)}`, + }; + const handler = createHandler('TEST', { schema: mockSchema as any, + version: 'v1.0.0', + serializer: 'LCL_OBJECT_TEST', + serializer_version: 'v1.0.0', toAbapGit: (obj) => ({ NAME: obj.name ?? '' }), }); @@ -41,7 +50,10 @@ describe('createHandler factory', () => { describe('default serialize behavior', () => { // Mock schema that returns XML-like content - const mockSchema = { build: (data: unknown) => `${JSON.stringify(data)}` }; + const mockSchema = { + build: (data: unknown) => + `${JSON.stringify(data)}`, + }; it('creates XML file when no getSource provided', async () => { const mockObject = { @@ -52,11 +64,14 @@ describe('default serialize behavior', () => { const handler = createHandler('XMLONLY', { schema: mockSchema as any, + version: 'v1.0.0', + serializer: 'LCL_OBJECT_XMLONLY', + serializer_version: 'v1.0.0', toAbapGit: (obj) => ({ CTEXT: obj.description ?? '' }), }); const files = await handler.serialize(mockObject as any); - + assert.strictEqual(files.length, 1); assert.ok(files[0].path.endsWith('.xmlonly.xml')); assert.ok(files[0].content.includes(' { const handler = createHandler('WITHSRC', { schema: mockSchema as any, + version: 'v1.0.0', + serializer: 'LCL_OBJECT_WITHSRC', + serializer_version: 'v1.0.0', toAbapGit: (obj) => ({ CTEXT: obj.description ?? '' }), getSource: async () => '* ABAP source code', }); const files = await handler.serialize(mockObject as any); - + assert.strictEqual(files.length, 2); - - const abapFile = files.find(f => f.path.endsWith('.abap')); - const xmlFile = files.find(f => f.path.endsWith('.xml')); - + + const abapFile = files.find((f) => f.path.endsWith('.abap')); + const xmlFile = files.find((f) => f.path.endsWith('.xml')); + assert.ok(abapFile, 'Should have ABAP file'); assert.ok(xmlFile, 'Should have XML file'); assert.strictEqual(abapFile?.content, '* ABAP source code'); @@ -91,31 +109,50 @@ describe('default serialize behavior', () => { const mockObject = { name: 'TEST_MULTI', description: 'Test with multiple sources', - dataSync: { name: 'TEST_MULTI', description: 'Test with multiple sources' }, + dataSync: { + name: 'TEST_MULTI', + description: 'Test with multiple sources', + }, }; const handler = createHandler('MULTISRC', { schema: mockSchema as any, + version: 'v1.0.0', + serializer: 'LCL_OBJECT_MULTISRC', + serializer_version: 'v1.0.0', toAbapGit: (obj) => ({ CTEXT: obj.description ?? '' }), getSources: () => [ { content: Promise.resolve('* Main source') }, - { suffix: 'locals_def', content: Promise.resolve('* Local definitions') }, + { + suffix: 'locals_def', + content: Promise.resolve('* Local definitions'), + }, { suffix: 'testclasses', content: Promise.resolve('') }, // Empty - should be filtered ], }); const files = await handler.serialize(mockObject as any); - + // Should have 2 ABAP files (empty one filtered) + 1 XML - const abapFiles = files.filter(f => f.path.endsWith('.abap')); - const xmlFiles = files.filter(f => f.path.endsWith('.xml')); - - assert.strictEqual(abapFiles.length, 2, 'Should have 2 non-empty ABAP files'); + const abapFiles = files.filter((f) => f.path.endsWith('.abap')); + const xmlFiles = files.filter((f) => f.path.endsWith('.xml')); + + assert.strictEqual( + abapFiles.length, + 2, + 'Should have 2 non-empty ABAP files', + ); assert.strictEqual(xmlFiles.length, 1, 'Should have 1 XML file'); - + // Check suffixes - assert.ok(abapFiles.some(f => f.path === 'test_multi.multisrc.abap'), 'Main file'); - assert.ok(abapFiles.some(f => f.path === 'test_multi.multisrc.locals_def.abap'), 'Locals def file'); + assert.ok( + abapFiles.some((f) => f.path === 'test_multi.multisrc.abap'), + 'Main file', + ); + assert.ok( + abapFiles.some((f) => f.path === 'test_multi.multisrc.locals_def.abap'), + 'Locals def file', + ); }); it('uses custom xmlFileName when provided', async () => { @@ -127,12 +164,15 @@ describe('default serialize behavior', () => { const handler = createHandler('CUSTXML', { schema: mockSchema as any, + version: 'v1.0.0', + serializer: 'LCL_OBJECT_CUSTXML', + serializer_version: 'v1.0.0', xmlFileName: 'package.devc.xml', toAbapGit: (obj) => ({ CTEXT: obj.description ?? '' }), }); const files = await handler.serialize(mockObject as any); - + assert.strictEqual(files.length, 1); assert.strictEqual(files[0].path, 'package.devc.xml'); }); diff --git a/packages/adt-plugin-abapgit/tests/schemas/clas.test.ts b/packages/adt-plugin-abapgit/tests/schemas/clas.test.ts index 138747de..05462967 100644 --- a/packages/adt-plugin-abapgit/tests/schemas/clas.test.ts +++ b/packages/adt-plugin-abapgit/tests/schemas/clas.test.ts @@ -1,17 +1,21 @@ /** * Test for CLAS (Class) schema - * + * * Fixture-driven: parses XML, validates content, round-trips */ import assert from 'node:assert'; -import { runSchemaTests, createTypedSchema, type SchemaScenario } from './base/scenario.ts'; +import { + runSchemaTests, + createTypedSchema, + type SchemaScenario, +} from './base/scenario.ts'; import { clas as clasSchema } from '../../src/schemas/generated/schemas/index.ts'; -import type { AbapGitType } from '../../src/schemas/generated/types/clas.ts'; +import type { ClasSchema } from '../../src/schemas/generated/types/clas.ts'; -const schema = createTypedSchema(clasSchema); +const schema = createTypedSchema(clasSchema); -const scenario: SchemaScenario = { +const scenario: SchemaScenario = { name: 'CLAS', xsdName: 'clas', schema, @@ -19,14 +23,19 @@ const scenario: SchemaScenario = { { path: 'clas/zcl_age_sample_class.clas.xml', validate: (data) => { + // Schema is union type - assert to the abapGit variant + const root = ( + data as { abapGit: ClasSchema['abapGit' & keyof ClasSchema] } + ).abapGit as any; + // Envelope - assert.strictEqual(data.version, 'v1.0.0'); - assert.strictEqual(data.serializer, 'LCL_OBJECT_CLAS'); - assert.strictEqual(data.serializer_version, 'v1.0.0'); - assert.strictEqual(data.abap.version, '1.0'); - + assert.strictEqual(root.version, 'v1.0.0'); + assert.strictEqual(root.serializer, 'LCL_OBJECT_CLAS'); + assert.strictEqual(root.serializer_version, 'v1.0.0'); + assert.strictEqual(root.abap.version, '1.0'); + // VSEOCLASS content - const clas = data.abap.values.VSEOCLASS!; + const clas = root.abap.values.VSEOCLASS!; assert.strictEqual(clas.CLSNAME, 'ZCL_AGE_SAMPLE_CLASS'); assert.strictEqual(clas.LANGU, 'E'); assert.strictEqual(clas.DESCRIPT, 'Sample class'); @@ -35,7 +44,6 @@ const scenario: SchemaScenario = { assert.strictEqual(clas.FIXPT, 'X'); assert.strictEqual(clas.UNICODE, 'X'); assert.strictEqual(clas.WITH_UNIT_TESTS, 'X'); - }, }, ], diff --git a/packages/adt-plugin-abapgit/tests/schemas/devc.test.ts b/packages/adt-plugin-abapgit/tests/schemas/devc.test.ts index 7562616c..19581b68 100644 --- a/packages/adt-plugin-abapgit/tests/schemas/devc.test.ts +++ b/packages/adt-plugin-abapgit/tests/schemas/devc.test.ts @@ -1,17 +1,21 @@ /** * Test for DEVC (Development Class/Package) schema - * + * * Fixture-driven: parses XML, validates content, round-trips */ import assert from 'node:assert'; -import { runSchemaTests, createTypedSchema, type SchemaScenario } from './base/scenario.ts'; +import { + runSchemaTests, + createTypedSchema, + type SchemaScenario, +} from './base/scenario.ts'; import { devc as devcSchema } from '../../src/schemas/generated/schemas/index.ts'; -import type { AbapGitType } from '../../src/schemas/generated/types/devc.ts'; +import type { DevcSchema } from '../../src/schemas/generated/types/devc.ts'; -const schema = createTypedSchema(devcSchema); +const schema = createTypedSchema(devcSchema); -const scenario: SchemaScenario = { +const scenario: SchemaScenario = { name: 'DEVC', xsdName: 'devc', schema, @@ -19,16 +23,19 @@ const scenario: SchemaScenario = { { path: 'devc/package.devc.xml', validate: (data) => { + // Schema is union type - assert to the abapGit variant + const root = (data as any).abapGit; + // Envelope attributes - assert.strictEqual(data.version, 'v1.0.0'); - assert.strictEqual(data.serializer, 'LCL_OBJECT_DEVC'); - assert.strictEqual(data.serializer_version, 'v1.0.0'); - + assert.strictEqual(root.version, 'v1.0.0'); + assert.strictEqual(root.serializer, 'LCL_OBJECT_DEVC'); + assert.strictEqual(root.serializer_version, 'v1.0.0'); + // asx:abap - assert.strictEqual(data.abap.version, '1.0'); - + assert.strictEqual(root.abap.version, '1.0'); + // DEVC content - const devc = data.abap.values.DEVC!; + const devc = root.abap.values.DEVC!; assert.strictEqual(devc.CTEXT, 'Classes'); }, }, diff --git a/packages/adt-plugin-abapgit/tests/schemas/doma.test.ts b/packages/adt-plugin-abapgit/tests/schemas/doma.test.ts index fe8ea878..08803c04 100644 --- a/packages/adt-plugin-abapgit/tests/schemas/doma.test.ts +++ b/packages/adt-plugin-abapgit/tests/schemas/doma.test.ts @@ -1,17 +1,21 @@ /** * Test for DOMA (Domain) schema - * + * * Fixture-driven: parses XML, validates content, round-trips */ import assert from 'node:assert'; -import { runSchemaTests, createTypedSchema, type SchemaScenario } from './base/scenario.ts'; +import { + runSchemaTests, + createTypedSchema, + type SchemaScenario, +} from './base/scenario.ts'; import { doma as domaSchema } from '../../src/schemas/generated/schemas/index.ts'; -import type { AbapGitType } from '../../src/schemas/generated/types/doma.ts'; +import type { DomaSchema } from '../../src/schemas/generated/types/doma.ts'; -const schema = createTypedSchema(domaSchema); +const schema = createTypedSchema(domaSchema); -const scenario: SchemaScenario = { +const scenario: SchemaScenario = { name: 'DOMA', xsdName: 'doma', schema, @@ -19,14 +23,17 @@ const scenario: SchemaScenario = { { path: 'doma/zage_fixed_values.doma.xml', validate: (data) => { + // Schema is union type - assert to the abapGit variant + const root = (data as any).abapGit; + // Envelope - assert.strictEqual(data.version, 'v1.0.0'); - assert.strictEqual(data.serializer, 'LCL_OBJECT_DOMA'); - assert.strictEqual(data.serializer_version, 'v1.0.0'); - assert.strictEqual(data.abap.version, '1.0'); - + assert.strictEqual(root.version, 'v1.0.0'); + assert.strictEqual(root.serializer, 'LCL_OBJECT_DOMA'); + assert.strictEqual(root.serializer_version, 'v1.0.0'); + assert.strictEqual(root.abap.version, '1.0'); + // DD01V content (domain header) - const dd01v = data.abap.values.DD01V!; + const dd01v = root.abap.values.DD01V!; assert.strictEqual(dd01v.DOMNAME, 'ZAGE_FIXED_VALUES'); assert.strictEqual(dd01v.DDLANGUAGE, 'E'); assert.strictEqual(dd01v.DATATYPE, 'CHAR'); @@ -34,18 +41,18 @@ const scenario: SchemaScenario = { assert.strictEqual(dd01v.OUTPUTLEN, '000001'); assert.strictEqual(dd01v.VALEXI, 'X'); assert.strictEqual(dd01v.DDTEXT, 'Fixed values'); - + // DD07V_TAB content (fixed values) - const dd07vTab = data.abap.values.DD07V_TAB; + const dd07vTab = root.abap.values.DD07V_TAB; assert.ok(dd07vTab, 'DD07V_TAB should exist'); assert.strictEqual(dd07vTab!.DD07V?.length, 2); - + // First fixed value const val1 = dd07vTab!.DD07V![0]; assert.strictEqual(val1.VALPOS, '0001'); assert.strictEqual(val1.DOMVALUE_L, 'A'); assert.strictEqual(val1.DDTEXT, 'This is A'); - + // Second fixed value const val2 = dd07vTab!.DD07V![1]; assert.strictEqual(val2.VALPOS, '0002'); diff --git a/packages/adt-plugin-abapgit/tests/schemas/dtel.test.ts b/packages/adt-plugin-abapgit/tests/schemas/dtel.test.ts index 0f8edd68..53c45968 100644 --- a/packages/adt-plugin-abapgit/tests/schemas/dtel.test.ts +++ b/packages/adt-plugin-abapgit/tests/schemas/dtel.test.ts @@ -1,17 +1,21 @@ /** * Test for DTEL (Data Element) schema - * + * * Fixture-driven: parses XML, validates content, round-trips */ import assert from 'node:assert'; -import { runSchemaTests, createTypedSchema, type SchemaScenario } from './base/scenario.ts'; +import { + runSchemaTests, + createTypedSchema, + type SchemaScenario, +} from './base/scenario.ts'; import { dtel as dtelSchema } from '../../src/schemas/generated/schemas/index.ts'; -import type { AbapGitType } from '../../src/schemas/generated/types/dtel.ts'; +import type { DtelSchema } from '../../src/schemas/generated/types/dtel.ts'; -const schema = createTypedSchema(dtelSchema); +const schema = createTypedSchema(dtelSchema); -const scenario: SchemaScenario = { +const scenario: SchemaScenario = { name: 'DTEL', xsdName: 'dtel', schema, @@ -19,14 +23,17 @@ const scenario: SchemaScenario = { { path: 'dtel/zage_dtel_with_domain.dtel.xml', validate: (data) => { + // Schema is union type - assert to the abapGit variant + const root = (data as any).abapGit; + // Envelope - assert.strictEqual(data.version, 'v1.0.0'); - assert.strictEqual(data.serializer, 'LCL_OBJECT_DTEL'); - assert.strictEqual(data.serializer_version, 'v1.0.0'); - assert.strictEqual(data.abap.version, '1.0'); - + assert.strictEqual(root.version, 'v1.0.0'); + assert.strictEqual(root.serializer, 'LCL_OBJECT_DTEL'); + assert.strictEqual(root.serializer_version, 'v1.0.0'); + assert.strictEqual(root.abap.version, '1.0'); + // DD04V content (data element) - const dd04v = data.abap.values.DD04V!; + const dd04v = root.abap.values.DD04V!; assert.strictEqual(dd04v.ROLLNAME, 'ZAGE_DTEL_WITH_DOMAIN'); assert.strictEqual(dd04v.DDLANGUAGE, 'E'); assert.strictEqual(dd04v.DOMNAME, 'ZAGE_CHAR_WITH_LENGTH'); diff --git a/packages/adt-plugin-abapgit/tests/schemas/intf.test.ts b/packages/adt-plugin-abapgit/tests/schemas/intf.test.ts index 2f390df7..de16e581 100644 --- a/packages/adt-plugin-abapgit/tests/schemas/intf.test.ts +++ b/packages/adt-plugin-abapgit/tests/schemas/intf.test.ts @@ -1,17 +1,21 @@ /** * Test for INTF (Interface) schema - * + * * Fixture-driven: parses XML, validates content, round-trips */ import assert from 'node:assert'; -import { runSchemaTests, createTypedSchema, type SchemaScenario } from './base/scenario.ts'; +import { + runSchemaTests, + createTypedSchema, + type SchemaScenario, +} from './base/scenario.ts'; import { intf as intfSchema } from '../../src/schemas/generated/schemas/index.ts'; -import type { AbapGitType } from '../../src/schemas/generated/types/intf.ts'; +import type { IntfSchema } from '../../src/schemas/generated/types/intf.ts'; -const schema = createTypedSchema(intfSchema); +const schema = createTypedSchema(intfSchema); -const scenario: SchemaScenario = { +const scenario: SchemaScenario = { name: 'INTF', xsdName: 'intf', schema, @@ -19,14 +23,17 @@ const scenario: SchemaScenario = { { path: 'intf/zif_age_test.intf.xml', validate: (data) => { + // Schema is union type - assert to the abapGit variant + const root = (data as any).abapGit; + // Envelope - assert.strictEqual(data.version, 'v1.0.0'); - assert.strictEqual(data.serializer, 'LCL_OBJECT_INTF'); - assert.strictEqual(data.serializer_version, 'v1.0.0'); - assert.strictEqual(data.abap.version, '1.0'); - + assert.strictEqual(root.version, 'v1.0.0'); + assert.strictEqual(root.serializer, 'LCL_OBJECT_INTF'); + assert.strictEqual(root.serializer_version, 'v1.0.0'); + assert.strictEqual(root.abap.version, '1.0'); + // VSEOINTERF content (interface) - const intf = data.abap.values.VSEOINTERF!; + const intf = root.abap.values.VSEOINTERF!; assert.strictEqual(intf.CLSNAME, 'ZIF_AGE_TEST'); assert.strictEqual(intf.LANGU, 'E'); assert.strictEqual(intf.DESCRIPT, 'Test interface'); diff --git a/packages/adt-plugin-abapgit/ts-xsd.config.ts b/packages/adt-plugin-abapgit/ts-xsd.config.ts index 3f324cfb..8bc5d3d0 100644 --- a/packages/adt-plugin-abapgit/ts-xsd.config.ts +++ b/packages/adt-plugin-abapgit/ts-xsd.config.ts @@ -1,16 +1,21 @@ /** * ts-xsd Codegen Configuration for adt-plugin-abapgit - * + * * 3-Step Pipeline: * 1. rawSchema() - Generate raw schema literals with `as const` * 2. flattenedInterfaces() - Generate TypeScript interfaces from XSD * 3. indexBarrel() - Generate typed index exports - * + * * Usage: * npx nx codegen adt-plugin-abapgit */ -import { defineConfig, rawSchema, interfaces, indexBarrel } from 'ts-xsd/generators'; +import { + defineConfig, + rawSchema, + interfaces, + indexBarrel, +} from 'ts-xsd/generators'; export default defineConfig({ // Use extensionless imports for bundler compatibility @@ -23,13 +28,7 @@ export default defineConfig({ outputDir: 'src/schemas/generated/schemas', // Only object schemas - base schemas (asx, abapgit) are included via xs:import/xs:include // and their types get merged into each object schema during resolution - schemas: [ - 'clas', - 'devc', - 'doma', - 'dtel', - 'intf', - ], + schemas: ['clas', 'devc', 'doma', 'dtel', 'intf'], }, }, generators: [ @@ -38,30 +37,30 @@ export default defineConfig({ rawSchema({ defaultExport: true, $xmlns: true, - $imports: false, // Not needed when resolve is enabled - schema is self-contained - resolve: true, // Merge imports, expand extensions and substitution groups + $imports: false, // Not needed when resolve is enabled - schema is self-contained + resolve: true, // Merge imports, expand extensions and substitution groups }), // Generate flattened TypeScript types to ../types/ directory interfaces({ filePattern: '../types/{name}.ts', - flatten: true, // Flatten all types into single file with root type alias + flatten: true, // Flatten all types into single file with root type alias addJsDoc: true, }), // Generate index.ts barrel file for schemas indexBarrel({ namedExports: true, - importExtension: '', // Extensionless - tsx loader handles resolution + importExtension: '', // Extensionless - tsx loader handles resolution }), ], // Generate aggregate index files after all sources are processed afterAll(ctx) { // Get all schemas from context - const schemas = Object.values(ctx.sources).flatMap(s => s.schemas); - + const schemas = Object.values(ctx.sources).flatMap((s) => s.schemas); + // Helper to capitalize first letter const capitalize = (s: string) => s.charAt(0).toUpperCase() + s.slice(1); - + // Main index file const mainIndex = [ '/**', @@ -89,8 +88,9 @@ export default defineConfig({ ' */', '', `// Object types - flattened root types renamed per schema to avoid conflicts`, - ...schemas.map(s => - `export type { ${capitalize(s)}Schema as ${capitalize(s)}AbapGitType } from './${s}';` + ...schemas.map( + (s) => + `export type { ${capitalize(s)}Schema as ${capitalize(s)}AbapGitType } from './${s}';`, ), '', ].join('\n'); @@ -114,22 +114,25 @@ export default defineConfig({ `import { abapGitSchema } from '../../lib/handlers/abapgit-schema';`, '', '// Raw schemas', - ...schemas.map(s => `import _${s} from './schemas/${s}';`), + ...schemas.map((s) => `import _${s} from './schemas/${s}';`), '', '// Full AbapGit types - using flattened root types', '// Note: Generated types may be unions, we import the raw schema type', - ...schemas.map(s => - `import type { ${capitalize(s)}Schema as _${capitalize(s)}Schema } from './types/${s}';` + ...schemas.map( + (s) => + `import type { ${capitalize(s)}Schema as _${capitalize(s)}Schema } from './types/${s}';`, ), '', '// Extract the abapGit variant from union types (generated types may be unions)', - ...schemas.map(s => - `type ${capitalize(s)}AbapGitType = Extract<_${capitalize(s)}Schema, { abapGit: unknown }>;` + ...schemas.map( + (s) => + `type ${capitalize(s)}AbapGitType = Extract<_${capitalize(s)}Schema, { abapGit: unknown }>;`, ), '', '// AbapGit schema instances - using flattened types with values extracted from abapGit.abap.values', - ...schemas.map(s => - `export const ${s} = abapGitSchema<${capitalize(s)}AbapGitType, ${capitalize(s)}AbapGitType['abapGit']['abap']['values']>(_${s});` + ...schemas.map( + (s) => + `export const ${s} = abapGitSchema<${capitalize(s)}AbapGitType, ${capitalize(s)}AbapGitType['abapGit']['abap']['values']>(_${s});`, ), '', '// Re-export types and utilities', diff --git a/packages/adt-plugin-abapgit/tsconfig.lib.json b/packages/adt-plugin-abapgit/tsconfig.lib.json index 5f5b3dd8..53f0f58f 100644 --- a/packages/adt-plugin-abapgit/tsconfig.lib.json +++ b/packages/adt-plugin-abapgit/tsconfig.lib.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", diff --git a/packages/adt-plugin-abapgit/tsconfig.test.json b/packages/adt-plugin-abapgit/tsconfig.test.json index 3e5d5858..dcbd7a53 100644 --- a/packages/adt-plugin-abapgit/tsconfig.test.json +++ b/packages/adt-plugin-abapgit/tsconfig.test.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": ".", "noEmit": true, "allowImportingTsExtensions": true, diff --git a/packages/adt-plugin/src/cli-types.ts b/packages/adt-plugin/src/cli-types.ts index 4ae78e50..f7c95c44 100644 --- a/packages/adt-plugin/src/cli-types.ts +++ b/packages/adt-plugin/src/cli-types.ts @@ -1,6 +1,6 @@ /** * CLI Command Plugin Types - * + * * CLI-agnostic interface for command plugins. * Plugins implement this interface without depending on any CLI framework (Commander, yargs, etc.) * The CLI shell (adt-cli) translates these definitions to the actual CLI framework. @@ -15,17 +15,17 @@ export interface CliOption { * @example '-o, --output ' or '--verbose' */ flags: string; - + /** * Description shown in help */ description: string; - + /** * Default value if not provided */ default?: string | boolean | number; - + /** * Whether this option is required */ @@ -42,12 +42,12 @@ export interface CliArgument { * @example '' or '[config]' */ name: string; - + /** * Description shown in help */ description: string; - + /** * Default value if not provided (only for optional arguments) */ @@ -62,17 +62,17 @@ export interface CliContext { * Current working directory */ cwd: string; - + /** * Loaded configuration from adt.config.ts (if present) */ config: Record; - + /** * Logger instance */ logger: CliLogger; - + /** * ADT client factory (provided by adt-cli when authenticated) * Returns an authenticated ADT client for making API calls. @@ -80,7 +80,7 @@ export interface CliContext { * Note: This is async - plugins must await the result. */ getAdtClient?: () => Promise; - + /** * ADT system name for hyperlinks (e.g., "S0D") * Used to construct adt:// protocol links. @@ -101,14 +101,14 @@ export interface CliLogger { /** * CLI Command Plugin interface - * + * * Implement this interface to create a CLI command plugin. * The plugin is CLI-agnostic - it doesn't know about Commander or any other CLI framework. - * + * * @example * ```typescript * import type { CliCommandPlugin } from '@abapify/adt-plugin'; - * + * * export const myCommand: CliCommandPlugin = { * name: 'my-command', * description: 'Does something useful', @@ -128,38 +128,35 @@ export interface CliCommandPlugin { * @example 'codegen' results in `adt codegen` */ name: string; - + /** * Command description shown in help */ description: string; - + /** * Command options (flags) */ options?: CliOption[]; - + /** * Positional arguments */ arguments?: CliArgument[]; - + /** * Nested subcommands * @example codegen.subcommands = [contractsCommand] results in `adt codegen contracts` */ subcommands?: CliCommandPlugin[]; - + /** * Execute the command - * + * * @param args - Parsed arguments and options as key-value pairs * @param ctx - Execution context (cwd, config, logger) */ - execute?( - args: Record, - ctx: CliContext - ): Promise; + execute?(args: Record, ctx: CliContext): Promise; } /** @@ -180,7 +177,7 @@ export interface AdtCliConfig { /** * Command plugins to load * Can be package names or relative paths - * + * * @example * ```typescript * commands: [ @@ -190,7 +187,7 @@ export interface AdtCliConfig { * ``` */ commands?: string[]; - + /** * Additional configuration passed to commands via context */ diff --git a/packages/adt-plugin/src/index.ts b/packages/adt-plugin/src/index.ts index e600a8ca..abce5a9c 100644 --- a/packages/adt-plugin/src/index.ts +++ b/packages/adt-plugin/src/index.ts @@ -1,12 +1,12 @@ /** * @abapify/adt-plugin - * + * * ADT Plugin interface and factory for abapify. - * + * * @example * ```typescript * import { createPlugin, type AdtPlugin } from '@abapify/adt-plugin'; - * + * * export const myPlugin = createPlugin({ * name: 'myFormat', * version: '1.0.0', diff --git a/packages/adt-plugin/src/types.ts b/packages/adt-plugin/src/types.ts index 58efae28..dfb9bba8 100644 --- a/packages/adt-plugin/src/types.ts +++ b/packages/adt-plugin/src/types.ts @@ -1,6 +1,6 @@ /** * ADT Plugin Types - * + * * Core types for ADT plugin system. */ @@ -21,15 +21,15 @@ export type AbapObjectType = string; /** * Context for import operation - * + * * The plugin is responsible for determining folder structure based on its format rules. * Plugin can use the provided resolver to load package hierarchy from SAP. */ export interface ImportContext { - /** + /** * Resolve full package path from root to the given package. * Uses ADK to load package → super package → etc until root. - * + * * @param packageName - Package name to resolve * @returns Array of package names from root to current (e.g., ['ZROOT', 'ZROOT_CHILD', 'ZROOT_CHILD_SUB']) */ @@ -51,7 +51,7 @@ export interface ImportResult { /** * FileTree - Virtual file system abstraction for export - * + * * Plugins receive this to iterate and read files without * direct dependency on Node.js fs module. */ @@ -98,22 +98,22 @@ export interface ExportResult { /** * ADT Plugin interface - service-based structure - * + * * Plugins provide format-specific serialization/deserialization * of ADK objects (e.g., abapGit format, OAT format). - * + * * @example * ```typescript * const plugin = createPlugin({ * name: 'myFormat', * version: '1.0.0', * description: 'My custom format', - * + * * registry: { * isSupported: (type) => ['CLAS', 'INTF'].includes(type), * getSupportedTypes: () => ['CLAS', 'INTF'], * }, - * + * * format: { * import: async (object, targetPath, context) => { * // Serialize object to files @@ -134,7 +134,7 @@ export interface AdtPlugin { * Check if object type is supported by this plugin */ isSupported(type: AbapObjectType): boolean; - + /** * Get all supported object types */ @@ -146,7 +146,7 @@ export interface AdtPlugin { /** * Import ADK object to file system (SAP → Git) * Converts ADK object to serialized format files - * + * * @param object - ADK object to serialize * @param targetPath - Base output directory * @param context - Import context (package path, etc.) @@ -154,18 +154,18 @@ export interface AdtPlugin { import( object: AdkObject, targetPath: string, - context: ImportContext + context: ImportContext, ): Promise; /** * Export from file system to ADK objects (Git → SAP) * Generator that yields ADK objects ready to be saved to SAP. - * + * * Plugin is responsible for: * - Iterating files in its format (*.oat.xml, *.abap, etc.) * - Parsing each file into ADK object * - Yielding ADK objects (does NOT save to SAP) - * + * * @param fileTree - Virtual file system to read from * @param client - ADT client for creating ADK objects * @yields ADK objects ready to be saved @@ -177,7 +177,7 @@ export interface AdtPlugin { readonly hooks?: { /** Called after all objects have been imported */ afterImport?(targetPath: string): Promise; - + /** Called before export starts */ beforeExport?(sourcePath: string): Promise; }; diff --git a/packages/adt-plugin/tsconfig.lib.json b/packages/adt-plugin/tsconfig.lib.json index 7d95e2f7..e1db5fc5 100644 --- a/packages/adt-plugin/tsconfig.lib.json +++ b/packages/adt-plugin/tsconfig.lib.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", diff --git a/packages/adt-puppeteer/src/adapter.ts b/packages/adt-puppeteer/src/adapter.ts index 31738acf..6c288020 100644 --- a/packages/adt-puppeteer/src/adapter.ts +++ b/packages/adt-puppeteer/src/adapter.ts @@ -7,7 +7,11 @@ import puppeteer from 'puppeteer'; import type { Browser, Page, Protocol } from 'puppeteer'; -import type { BrowserAdapter, CookieData, ResponseEvent } from '@abapify/browser-auth'; +import type { + BrowserAdapter, + CookieData, + ResponseEvent, +} from '@abapify/browser-auth'; /** * Convert Puppeteer cookie to CookieData @@ -63,25 +67,27 @@ export function createPuppeteerAdapter(): BrowserAdapter { } // Wire up event handlers - page.on('response', response => { + page.on('response', (response) => { const event: ResponseEvent = { url: response.url(), status: response.status(), }; - responseHandlers.forEach(handler => handler(event)); + responseHandlers.forEach((handler) => handler(event)); }); page.once('close', () => { - closeHandlers.forEach(handler => handler()); + closeHandlers.forEach((handler) => handler()); }); }, async goto(url: string, options?: { timeout?: number }) { if (!page) throw new Error('Page not created'); - await page.goto(url, { - waitUntil: 'domcontentloaded', - timeout: options?.timeout ?? 30000, - }).catch(() => {}); + await page + .goto(url, { + waitUntil: 'domcontentloaded', + timeout: options?.timeout ?? 30000, + }) + .catch(() => {}); }, async getCookies(): Promise { @@ -95,11 +101,16 @@ export function createPuppeteerAdapter(): BrowserAdapter { if (!page) throw new Error('Page not created'); const client = await page.createCDPSession(); const { cookies } = await client.send('Network.getAllCookies'); - const toRemove = cookies.filter(c => - c.domain.includes(domain) || domain.includes(c.domain.replace(/^\./, '')) + const toRemove = cookies.filter( + (c) => + c.domain.includes(domain) || + domain.includes(c.domain.replace(/^\./, '')), ); for (const cookie of toRemove) { - await client.send('Network.deleteCookies', { name: cookie.name, domain: cookie.domain }); + await client.send('Network.deleteCookies', { + name: cookie.name, + domain: cookie.domain, + }); } }, diff --git a/packages/adt-puppeteer/src/index.ts b/packages/adt-puppeteer/src/index.ts index a1d83382..994bb2fc 100644 --- a/packages/adt-puppeteer/src/index.ts +++ b/packages/adt-puppeteer/src/index.ts @@ -5,13 +5,19 @@ * Uses @abapify/browser-auth core with Puppeteer adapter. */ -import { puppeteerAuth } from './puppeteer-auth'; import type { AdtConfig, Destination } from '@abapify/adt-config'; import type { BrowserAuthOptions } from '@abapify/browser-auth'; // Re-export types -export type { PuppeteerCredentials, PuppeteerAuthOptions } from './puppeteer-auth'; -export type { BrowserCredentials, BrowserAuthOptions, CookieData } from '@abapify/browser-auth'; +export type { + PuppeteerCredentials, + PuppeteerAuthOptions, +} from './puppeteer-auth'; +export type { + BrowserCredentials, + BrowserAuthOptions, + CookieData, +} from '@abapify/browser-auth'; /** * Plugin-level options applied to all destinations @@ -33,7 +39,7 @@ function createPuppeteerDestination(options: BrowserAuthOptions): Destination { */ export function withPuppeteer( config: AdtConfig, - options?: Partial + options?: Partial, ): AdtConfig { if (!config.destinations) { return config; @@ -52,9 +58,15 @@ export function withPuppeteer( destinations[name] = dest; } } else if (typeof dest === 'string') { - destinations[name] = createPuppeteerDestination({ url: dest, ...options }); + destinations[name] = createPuppeteerDestination({ + url: dest, + ...options, + }); } else { - destinations[name] = createPuppeteerDestination({ ...(dest as BrowserAuthOptions), ...options }); + destinations[name] = createPuppeteerDestination({ + ...(dest as BrowserAuthOptions), + ...options, + }); } } @@ -62,7 +74,12 @@ export function withPuppeteer( } // Main exports -export { puppeteerAuth, puppeteer, toCookieHeader, toHeaders } from './puppeteer-auth'; +export { + puppeteerAuth, + puppeteer, + toCookieHeader, + toHeaders, +} from './puppeteer-auth'; // AuthManager compatibility exports export { default } from './auth-plugin'; diff --git a/packages/adt-puppeteer/tsconfig.lib.json b/packages/adt-puppeteer/tsconfig.lib.json index c66cbb39..3b264143 100644 --- a/packages/adt-puppeteer/tsconfig.lib.json +++ b/packages/adt-puppeteer/tsconfig.lib.json @@ -16,7 +16,7 @@ "path": "../adt-config/tsconfig.lib.json" }, { - "path": "../adt-auth" + "path": "../adt-auth/tsconfig.lib.json" } ] } diff --git a/packages/adt-schemas/project.json b/packages/adt-schemas/project.json index 8f5a388d..90c01d22 100644 --- a/packages/adt-schemas/project.json +++ b/packages/adt-schemas/project.json @@ -17,7 +17,10 @@ "cwd": "{projectRoot}" }, "dependsOn": ["download", "ts-xsd:build"], - "inputs": ["{projectRoot}/.xsd/**/*.xsd", "{projectRoot}/ts-xsd.config.ts"], + "inputs": [ + "{projectRoot}/.xsd/**/*.xsd", + "{projectRoot}/ts-xsd.config.ts" + ], "outputs": ["{projectRoot}/src/schemas/generated"] }, "typecheck:test": { diff --git a/packages/adt-schemas/src/schemas/generated/schemas/custom/atcRun.ts b/packages/adt-schemas/src/schemas/generated/schemas/custom/atcRun.ts index 809fdc24..c8efbcad 100644 --- a/packages/adt-schemas/src/schemas/generated/schemas/custom/atcRun.ts +++ b/packages/adt-schemas/src/schemas/generated/schemas/custom/atcRun.ts @@ -1,6 +1,6 @@ /** * Auto-generated schema from XSD - * + * * DO NOT EDIT - Generated by ts-xsd codegen * Source: xsd/custom/atcRun.xsd */ @@ -9,72 +9,70 @@ import adtcore from '../sap/adtcore'; export default { $xmlns: { - xsd: "http://www.w3.org/2001/XMLSchema", - atc: "http://www.sap.com/adt/atc", - adtcore: "http://www.sap.com/adt/core", + xsd: 'http://www.w3.org/2001/XMLSchema', + atc: 'http://www.sap.com/adt/atc', + adtcore: 'http://www.sap.com/adt/core', }, - $imports: [ - adtcore, - ], - targetNamespace: "http://www.sap.com/adt/atc", - attributeFormDefault: "unqualified", - elementFormDefault: "qualified", + $imports: [adtcore], + targetNamespace: 'http://www.sap.com/adt/atc', + attributeFormDefault: 'unqualified', + elementFormDefault: 'qualified', element: [ { - name: "run", - type: "atc:AtcRunRequest", + name: 'run', + type: 'atc:AtcRunRequest', }, ], complexType: [ { - name: "AtcRunRequest", + name: 'AtcRunRequest', sequence: { element: [ { - name: "objectSets", - type: "atc:AtcObjectSets", - minOccurs: "1", - maxOccurs: "1", - form: "unqualified", + name: 'objectSets', + type: 'atc:AtcObjectSets', + minOccurs: '1', + maxOccurs: '1', + form: 'unqualified', }, ], }, attribute: [ { - name: "maximumVerdicts", - type: "xsd:integer", + name: 'maximumVerdicts', + type: 'xsd:integer', }, ], }, { - name: "AtcObjectSets", + name: 'AtcObjectSets', sequence: { element: [ { - name: "objectSet", - type: "atc:AtcObjectSetRequest", - minOccurs: "1", - maxOccurs: "unbounded", - form: "unqualified", + name: 'objectSet', + type: 'atc:AtcObjectSetRequest', + minOccurs: '1', + maxOccurs: 'unbounded', + form: 'unqualified', }, ], }, }, { - name: "AtcObjectSetRequest", + name: 'AtcObjectSetRequest', sequence: { element: [ { - ref: "adtcore:objectReferences", - minOccurs: "0", - maxOccurs: "1", + ref: 'adtcore:objectReferences', + minOccurs: '0', + maxOccurs: '1', }, ], }, attribute: [ { - name: "kind", - type: "xsd:string", + name: 'kind', + type: 'xsd:string', }, ], }, diff --git a/packages/adt-schemas/src/schemas/generated/schemas/sap/exception.ts b/packages/adt-schemas/src/schemas/generated/schemas/sap/exception.ts index 0dcabd93..5569980d 100644 --- a/packages/adt-schemas/src/schemas/generated/schemas/sap/exception.ts +++ b/packages/adt-schemas/src/schemas/generated/schemas/sap/exception.ts @@ -1,117 +1,117 @@ /** * Auto-generated schema from XSD - * + * * DO NOT EDIT - Generated by ts-xsd codegen * Source: xsd/sap/exception.xsd */ export default { $xmlns: { - ecore: "http://www.eclipse.org/emf/2002/Ecore", - xsd: "http://www.w3.org/2001/XMLSchema", - exc: "http://www.sap.com/abapxml/types/communicationframework", + ecore: 'http://www.eclipse.org/emf/2002/Ecore', + xsd: 'http://www.w3.org/2001/XMLSchema', + exc: 'http://www.sap.com/abapxml/types/communicationframework', }, - targetNamespace: "http://www.sap.com/abapxml/types/communicationframework", - attributeFormDefault: "unqualified", - elementFormDefault: "unqualified", + targetNamespace: 'http://www.sap.com/abapxml/types/communicationframework', + attributeFormDefault: 'unqualified', + elementFormDefault: 'unqualified', element: [ { - name: "exception", - type: "exc:Exception", + name: 'exception', + type: 'exc:Exception', }, ], complexType: [ { - name: "Exception", + name: 'Exception', sequence: { element: [ { - name: "namespace", - type: "exc:Namespace", - minOccurs: "0", - maxOccurs: "1", + name: 'namespace', + type: 'exc:Namespace', + minOccurs: '0', + maxOccurs: '1', }, { - name: "type", - type: "exc:Type", - minOccurs: "0", - maxOccurs: "1", + name: 'type', + type: 'exc:Type', + minOccurs: '0', + maxOccurs: '1', }, { - name: "message", - type: "exc:Message", - minOccurs: "0", - maxOccurs: "1", + name: 'message', + type: 'exc:Message', + minOccurs: '0', + maxOccurs: '1', }, { - name: "localizedMessage", - type: "exc:Message", - minOccurs: "0", - maxOccurs: "1", + name: 'localizedMessage', + type: 'exc:Message', + minOccurs: '0', + maxOccurs: '1', }, { - name: "properties", - type: "exc:Properties", - minOccurs: "0", - maxOccurs: "1", + name: 'properties', + type: 'exc:Properties', + minOccurs: '0', + maxOccurs: '1', }, ], }, }, { - name: "Namespace", + name: 'Namespace', attribute: [ { - name: "id", - type: "xsd:string", + name: 'id', + type: 'xsd:string', }, ], }, { - name: "Type", + name: 'Type', attribute: [ { - name: "id", - type: "xsd:string", + name: 'id', + type: 'xsd:string', }, ], }, { - name: "Message", + name: 'Message', simpleContent: { extension: { - base: "xsd:string", + base: 'xsd:string', attribute: [ { - name: "lang", - type: "xsd:string", + name: 'lang', + type: 'xsd:string', }, ], }, }, }, { - name: "Properties", + name: 'Properties', sequence: { element: [ { - name: "entry", - type: "exc:Entry", - minOccurs: "0", - maxOccurs: "unbounded", + name: 'entry', + type: 'exc:Entry', + minOccurs: '0', + maxOccurs: 'unbounded', }, ], }, }, { - name: "Entry", + name: 'Entry', simpleContent: { extension: { - base: "xsd:string", + base: 'xsd:string', attribute: [ { - name: "key", - type: "xsd:string", + name: 'key', + type: 'xsd:string', }, ], }, diff --git a/packages/adt-schemas/src/schemas/generated/typed.ts b/packages/adt-schemas/src/schemas/generated/typed.ts index 705f42bf..dba63f9f 100644 --- a/packages/adt-schemas/src/schemas/generated/typed.ts +++ b/packages/adt-schemas/src/schemas/generated/typed.ts @@ -1,11 +1,11 @@ /** * Auto-generated typed schema exports - * + * * DO NOT EDIT - Generated by ts-xsd codegen - * + * * Only target schemas are exported here. * Internal schemas (xml, abapoo, etc.) are used for type resolution only. - * + * * @example * import { classes } from 'adt-schemas'; * const data = classes.parse(xml); // data is fully typed! @@ -54,72 +54,103 @@ import type { AtcRunSchema } from './types/custom/atcRun.types'; import _atom from './schemas/sap/atom'; export const atom: TypedSchema = typedSchema(_atom); import _adtcore from './schemas/sap/adtcore'; -export const adtcore: TypedSchema = typedSchema(_adtcore); +export const adtcore: TypedSchema = + typedSchema(_adtcore); import _exception from './schemas/sap/exception'; -export const exception: TypedSchema = typedSchema(_exception); +export const exception: TypedSchema = + typedSchema(_exception); import _classes from './schemas/sap/classes'; -export const classes: TypedSchema = typedSchema(_classes); +export const classes: TypedSchema = + typedSchema(_classes); import _interfaces from './schemas/sap/interfaces'; -export const interfaces: TypedSchema = typedSchema(_interfaces); +export const interfaces: TypedSchema = + typedSchema(_interfaces); import _packagesV1 from './schemas/sap/packagesV1'; -export const packagesV1: TypedSchema = typedSchema(_packagesV1); +export const packagesV1: TypedSchema = + typedSchema(_packagesV1); import _atc from './schemas/sap/atc'; export const atc: TypedSchema = typedSchema(_atc); import _atcexemption from './schemas/sap/atcexemption'; -export const atcexemption: TypedSchema = typedSchema(_atcexemption); +export const atcexemption: TypedSchema = + typedSchema(_atcexemption); import _atcfinding from './schemas/sap/atcfinding'; -export const atcfinding: TypedSchema = typedSchema(_atcfinding); +export const atcfinding: TypedSchema = + typedSchema(_atcfinding); import _atcinfo from './schemas/sap/atcinfo'; -export const atcinfo: TypedSchema = typedSchema(_atcinfo); +export const atcinfo: TypedSchema = + typedSchema(_atcinfo); import _atcobject from './schemas/sap/atcobject'; -export const atcobject: TypedSchema = typedSchema(_atcobject); +export const atcobject: TypedSchema = + typedSchema(_atcobject); import _atcresult from './schemas/sap/atcresult'; -export const atcresult: TypedSchema = typedSchema(_atcresult); +export const atcresult: TypedSchema = + typedSchema(_atcresult); import _atcresultquery from './schemas/sap/atcresultquery'; -export const atcresultquery: TypedSchema = typedSchema(_atcresultquery); +export const atcresultquery: TypedSchema = + typedSchema(_atcresultquery); import _atctagdescription from './schemas/sap/atctagdescription'; -export const atctagdescription: TypedSchema = typedSchema(_atctagdescription); +export const atctagdescription: TypedSchema = + typedSchema(_atctagdescription); import _atcworklist from './schemas/sap/atcworklist'; -export const atcworklist: TypedSchema = typedSchema(_atcworklist); +export const atcworklist: TypedSchema = + typedSchema(_atcworklist); import _transportmanagment from './schemas/sap/transportmanagment'; -export const transportmanagment: TypedSchema = typedSchema(_transportmanagment); +export const transportmanagment: TypedSchema = + typedSchema(_transportmanagment); import _transportsearch from './schemas/sap/transportsearch'; -export const transportsearch: TypedSchema = typedSchema(_transportsearch); +export const transportsearch: TypedSchema = + typedSchema(_transportsearch); import _configuration from './schemas/sap/configuration'; -export const configuration: TypedSchema = typedSchema(_configuration); +export const configuration: TypedSchema = + typedSchema(_configuration); import _configurations from './schemas/sap/configurations'; -export const configurations: TypedSchema = typedSchema(_configurations); +export const configurations: TypedSchema = + typedSchema(_configurations); import _checkrun from './schemas/sap/checkrun'; -export const checkrun: TypedSchema = typedSchema(_checkrun); +export const checkrun: TypedSchema = + typedSchema(_checkrun); import _checklist from './schemas/sap/checklist'; -export const checklist: TypedSchema = typedSchema(_checklist); +export const checklist: TypedSchema = + typedSchema(_checklist); import _debugger from './schemas/sap/debugger'; -export const debuggerSchema: TypedSchema = typedSchema(_debugger); +export const debuggerSchema: TypedSchema = + typedSchema(_debugger); import _logpoint from './schemas/sap/logpoint'; -export const logpoint: TypedSchema = typedSchema(_logpoint); +export const logpoint: TypedSchema = + typedSchema(_logpoint); import _traces from './schemas/sap/traces'; -export const traces: TypedSchema = typedSchema(_traces); +export const traces: TypedSchema = + typedSchema(_traces); import _quickfixes from './schemas/sap/quickfixes'; -export const quickfixes: TypedSchema = typedSchema(_quickfixes); +export const quickfixes: TypedSchema = + typedSchema(_quickfixes); import _log from './schemas/sap/log'; export const log: TypedSchema = typedSchema(_log); import _templatelink from './schemas/sap/templatelink'; -export const templatelink: TypedSchema = typedSchema(_templatelink); +export const templatelink: TypedSchema = + typedSchema(_templatelink); // Custom schemas import _atomExtended from './schemas/custom/atomExtended'; -export const atomExtended: TypedSchema = typedSchema(_atomExtended); +export const atomExtended: TypedSchema = + typedSchema(_atomExtended); import _discovery from './schemas/custom/discovery'; -export const discovery: TypedSchema = typedSchema(_discovery); +export const discovery: TypedSchema = + typedSchema(_discovery); import _http from './schemas/custom/http'; export const http: TypedSchema = typedSchema(_http); import _templatelinkExtended from './schemas/custom/templatelinkExtended'; -export const templatelinkExtended: TypedSchema = typedSchema(_templatelinkExtended); +export const templatelinkExtended: TypedSchema = + typedSchema(_templatelinkExtended); import _transportfind from './schemas/custom/transportfind'; -export const transportfind: TypedSchema = typedSchema(_transportfind); +export const transportfind: TypedSchema = + typedSchema(_transportfind); import _transportmanagmentCreate from './schemas/custom/transportmanagmentCreate'; -export const transportmanagmentCreate: TypedSchema = typedSchema(_transportmanagmentCreate); +export const transportmanagmentCreate: TypedSchema = + typedSchema(_transportmanagmentCreate); import _transportmanagmentSingle from './schemas/custom/transportmanagmentSingle'; -export const transportmanagmentSingle: TypedSchema = typedSchema(_transportmanagmentSingle); +export const transportmanagmentSingle: TypedSchema = + typedSchema(_transportmanagmentSingle); import _atcRun from './schemas/custom/atcRun'; -export const atcRun: TypedSchema = typedSchema(_atcRun); +export const atcRun: TypedSchema = + typedSchema(_atcRun); diff --git a/packages/adt-schemas/src/schemas/generated/types/custom/atcRun.types.ts b/packages/adt-schemas/src/schemas/generated/types/custom/atcRun.types.ts index 9a725438..1a919c9f 100644 --- a/packages/adt-schemas/src/schemas/generated/types/custom/atcRun.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/custom/atcRun.types.ts @@ -6,12 +6,12 @@ */ export type AtcRunSchema = { - run: { - objectSets: { - objectSet: { - kind?: string; - }[]; - }; - maximumVerdicts?: number; + run: { + objectSets: { + objectSet: { + kind?: string; + }[]; }; + maximumVerdicts?: number; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/custom/atomExtended.types.ts b/packages/adt-schemas/src/schemas/generated/types/custom/atomExtended.types.ts index fdc02682..03b85575 100644 --- a/packages/adt-schemas/src/schemas/generated/types/custom/atomExtended.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/custom/atomExtended.types.ts @@ -5,16 +5,19 @@ * Mode: Flattened */ -export type AtomExtendedSchema = { - title: string; -} | { - category: { +export type AtomExtendedSchema = + | { + title: string; + } + | { + category: { term?: string; scheme?: string; label?: string; - }; -} | { - link: { + }; + } + | { + link: { href: string; rel?: string; type?: string; @@ -23,5 +26,5 @@ export type AtomExtendedSchema = { length?: number; etag?: string; _text?: string; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/custom/discovery.types.ts b/packages/adt-schemas/src/schemas/generated/types/custom/discovery.types.ts index ebf7fe97..e23250ae 100644 --- a/packages/adt-schemas/src/schemas/generated/types/custom/discovery.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/custom/discovery.types.ts @@ -6,12 +6,12 @@ */ export type DiscoverySchema = { - service: { - workspace?: { - collection?: { - accept?: string[]; - href: string; - }[]; - }[]; - }; + service: { + workspace?: { + collection?: { + accept?: string[]; + href: string; + }[]; + }[]; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/custom/http.types.ts b/packages/adt-schemas/src/schemas/generated/types/custom/http.types.ts index dfba3f53..bb981325 100644 --- a/packages/adt-schemas/src/schemas/generated/types/custom/http.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/custom/http.types.ts @@ -6,12 +6,12 @@ */ export type HttpSchema = { - session: { - properties?: { - property?: { - _text?: string; - name: string; - }[]; - }; + session: { + properties?: { + property?: { + $value?: string; + name: string; + }[]; }; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/custom/templatelinkExtended.types.ts b/packages/adt-schemas/src/schemas/generated/types/custom/templatelinkExtended.types.ts index d448778a..8fb7fb57 100644 --- a/packages/adt-schemas/src/schemas/generated/types/custom/templatelinkExtended.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/custom/templatelinkExtended.types.ts @@ -5,22 +5,24 @@ * Mode: Flattened */ -export type TemplatelinkExtendedSchema = { - templateLinks: { +export type TemplatelinkExtendedSchema = + | { + templateLinks: { templateLink?: { - template: string; - rel: string; - type?: string; - title?: string; - _text?: string; + template: string; + rel: string; + type?: string; + title?: string; + _text?: string; }[]; - }; -} | { - templateLink: { + }; + } + | { + templateLink: { template: string; rel: string; type?: string; title?: string; _text?: string; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/custom/transportmanagmentSingle.types.ts b/packages/adt-schemas/src/schemas/generated/types/custom/transportmanagmentSingle.types.ts index a0857263..eb934366 100644 --- a/packages/adt-schemas/src/schemas/generated/types/custom/transportmanagmentSingle.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/custom/transportmanagmentSingle.types.ts @@ -6,171 +6,178 @@ */ export type TransportmanagmentSingleSchema = { - root: { - containerRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - adtTemplate?: { - adtProperty?: { - _text?: string; - key?: string; - }[]; - name?: string; - }; - request?: { - long_desc?: string; - attributes?: { - attribute?: string; - description?: string; - value?: string; - position?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - lock_status?: string; - position?: string; - img_activity?: string; - obj_func?: string; - }[]; - all_objects?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - lock_status?: string; - position?: string; - img_activity?: string; - obj_func?: string; - }[]; - }; - task?: { - long_desc?: string; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - lock_status?: string; - position?: string; - img_activity?: string; - obj_func?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - type?: string; - status_text?: string; - target?: string; - target_desc?: string; - source_client?: string; - parent?: string; - cts_project?: string; - cts_project_desc?: string; - lastchanged_timestamp?: string; - docu?: string; - }[]; - review?: { - repository_id?: string; - repository_url?: string; - repository_branch?: string; - pull_request_url?: string; - }; - dynamic_attributes?: { - dynamic_attribute?: { - properties?: { - property?: { - key?: string; - value?: string; - }[]; - }; - attribute?: string; - value?: string; - description?: string; - domain_name?: string; - }[]; - }; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - type?: string; - status_text?: string; - target?: string; - target_desc?: string; - source_client?: string; - parent?: string; - cts_project?: string; - cts_project_desc?: string; - lastchanged_timestamp?: string; - docu?: string; - }; - task?: { - long_desc?: string; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - lock_status?: string; - position?: string; - img_activity?: string; - obj_func?: string; + root: { + containerRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; + adtTemplate?: { + adtProperty?: { + $value?: string; + key?: string; + }[]; + name?: string; + }; + request?: { + long_desc?: string; + attributes?: { + attribute?: string; + description?: string; + value?: string; + position?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + lock_status?: string; + position?: string; + img_activity?: string; + obj_func?: string; + }[]; + all_objects?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + lock_status?: string; + position?: string; + img_activity?: string; + obj_func?: string; + }[]; + }; + task?: { + long_desc?: string; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + lock_status?: string; + position?: string; + img_activity?: string; + obj_func?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + type?: string; + status_text?: string; + target?: string; + target_desc?: string; + source_client?: string; + parent?: string; + cts_project?: string; + cts_project_desc?: string; + lastchanged_timestamp?: string; + docu?: string; + }[]; + review?: { + repository_id?: string; + repository_url?: string; + repository_branch?: string; + pull_request_url?: string; + }; + dynamic_attributes?: { + dynamic_attribute?: { + properties?: { + property?: { + key?: string; + value?: string; }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - type?: string; - status_text?: string; - target?: string; - target_desc?: string; - source_client?: string; - parent?: string; - cts_project?: string; - cts_project_desc?: string; - lastchanged_timestamp?: string; - docu?: string; + }; + attribute?: string; + value?: string; + description?: string; + domain_name?: string; }[]; - name: string; - type: string; - changedBy?: string; - changedAt?: string; - createdAt?: string; - createdBy?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; - description?: string; - descriptionTextLimit?: number; - language?: string; - object_type?: string; + }; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + type?: string; + status_text?: string; + target?: string; + target_desc?: string; + source_client?: string; + parent?: string; + cts_project?: string; + cts_project_desc?: string; + lastchanged_timestamp?: string; + docu?: string; }; + task?: { + long_desc?: string; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + lock_status?: string; + position?: string; + img_activity?: string; + obj_func?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + type?: string; + status_text?: string; + target?: string; + target_desc?: string; + source_client?: string; + parent?: string; + cts_project?: string; + cts_project_desc?: string; + lastchanged_timestamp?: string; + docu?: string; + }[]; + name: string; + type: string; + changedBy?: string; + changedAt?: string; + createdAt?: string; + createdBy?: string; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; + description?: string; + descriptionTextLimit?: number; + language?: string; + object_type?: string; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/abapsource.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/abapsource.types.ts index 5f5411eb..2a41c1b9 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/abapsource.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/abapsource.types.ts @@ -5,26 +5,28 @@ * Mode: Flattened */ -export type AbapsourceSchema = { - syntaxConfigurations: { +export type AbapsourceSchema = + | { + syntaxConfigurations: { syntaxConfiguration?: { - language?: { - version?: string; - description?: string; - }; - objectUsage?: { - restricted?: boolean; - }; - }[]; - }; -} | { - syntaxConfiguration: { - language?: { + language?: { version?: string; description?: string; + }; + objectUsage?: { + restricted?: boolean; + }; + }[]; + }; + } + | { + syntaxConfiguration: { + language?: { + version?: string; + description?: string; }; objectUsage?: { - restricted?: boolean; + restricted?: boolean; }; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/adtcore.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/adtcore.types.ts index 394ffc5e..739b4d55 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/adtcore.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/adtcore.types.ts @@ -5,32 +5,33 @@ * Mode: Flattened */ -export type AdtcoreSchema = { - mainObject: { +export type AdtcoreSchema = + | { + mainObject: { containerRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; adtTemplate?: { - adtProperty?: { - _text?: string; - key?: string; - }[]; - name?: string; + adtProperty?: { + $value?: string; + key?: string; + }[]; + name?: string; }; packageRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; name: string; type: string; @@ -38,7 +39,14 @@ export type AdtcoreSchema = { changedAt?: string; createdAt?: string; createdBy?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; description?: string; descriptionTextLimit?: number; language?: string; @@ -46,22 +54,24 @@ export type AdtcoreSchema = { masterLanguage?: string; responsible?: string; abapLanguageVersion?: string; - }; -} | { - objectReferences: { + }; + } + | { + objectReferences: { objectReference: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }[]; name?: string; - }; -} | { - objectReference: { + }; + } + | { + objectReference: { extension?: unknown; uri?: string; parentUri?: string; @@ -69,11 +79,12 @@ export type AdtcoreSchema = { name?: string; packageName?: string; description?: string; - }; -} | { - content: { - _text?: string; + }; + } + | { + content: { + $value?: string; type?: string; encoding?: string; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/atcexemption.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/atcexemption.types.ts index 298e937c..cc9be695 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/atcexemption.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/atcexemption.types.ts @@ -5,8 +5,9 @@ * Mode: Flattened */ -export type AtcexemptionSchema = { - exemptionProposal: { +export type AtcexemptionSchema = + | { + exemptionProposal: { finding?: string; package: string; subObject?: string; @@ -14,31 +15,31 @@ export type AtcexemptionSchema = { subObjectTypeDescr: string; objectTypeDescr: string; restriction: { - thisFinding: { - _text?: boolean; - enabled: boolean; + thisFinding: { + $value?: boolean; + enabled: boolean; + }; + rangeOfFindings: { + restrictByObject: { + $value?: string; + subobject?: boolean; + object?: boolean; + package?: boolean; }; - rangeOfFindings: { - restrictByObject: { - _text?: string; - subobject?: boolean; - object?: boolean; - package?: boolean; - }; - restrictByCheck: { - _text?: string; - message?: boolean; - check?: boolean; - }; - restrictByValidity?: { - _text?: string; - unrestricted?: boolean; - date?: boolean; - component_release?: boolean; - support_package?: boolean; - }; - enabled: boolean; + restrictByCheck: { + $value?: string; + message?: boolean; + check?: boolean; }; + restrictByValidity?: { + $value?: string; + unrestricted?: boolean; + date?: boolean; + component_release?: boolean; + support_package?: boolean; + }; + enabled: boolean; + }; }; approver: string; apprIsArea?: string; @@ -52,64 +53,66 @@ export type AtcexemptionSchema = { checkClass: string; validUntil: string; supportPackage?: string; - }; -} | { - exemptionApply: { + }; + } + | { + exemptionApply: { exemptionProposal: { - finding?: string; - package: string; - subObject?: string; - subObjectType?: string; - subObjectTypeDescr: string; - objectTypeDescr: string; - restriction: { - thisFinding: { - _text?: boolean; - enabled: boolean; - }; - rangeOfFindings: { - restrictByObject: { - _text?: string; - subobject?: boolean; - object?: boolean; - package?: boolean; - }; - restrictByCheck: { - _text?: string; - message?: boolean; - check?: boolean; - }; - restrictByValidity?: { - _text?: string; - unrestricted?: boolean; - date?: boolean; - component_release?: boolean; - support_package?: boolean; - }; - enabled: boolean; - }; + finding?: string; + package: string; + subObject?: string; + subObjectType?: string; + subObjectTypeDescr: string; + objectTypeDescr: string; + restriction: { + thisFinding: { + $value?: boolean; + enabled: boolean; + }; + rangeOfFindings: { + restrictByObject: { + $value?: string; + subobject?: boolean; + object?: boolean; + package?: boolean; + }; + restrictByCheck: { + $value?: string; + message?: boolean; + check?: boolean; + }; + restrictByValidity?: { + $value?: string; + unrestricted?: boolean; + date?: boolean; + component_release?: boolean; + support_package?: boolean; + }; + enabled: boolean; }; - approver: string; - apprIsArea?: string; - reason: string; - validity: string; - release: string; - softwareComponent: string; - softwareComponentDescription: string; - justification: string; - notify: string; - checkClass: string; - validUntil: string; - supportPackage?: string; + }; + approver: string; + apprIsArea?: string; + reason: string; + validity: string; + release: string; + softwareComponent: string; + softwareComponentDescription: string; + justification: string; + notify: string; + checkClass: string; + validUntil: string; + supportPackage?: string; }; status: { - message: string; - type: string; + message: string; + type: string; }; - }; -} | { - status: { + }; + } + | { + status: { message: string; type: string; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/atcfinding.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/atcfinding.types.ts index f74a0c50..a6a4072e 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/atcfinding.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/atcfinding.types.ts @@ -5,21 +5,22 @@ * Mode: Flattened */ -export type AtcfindingSchema = { - finding: { +export type AtcfindingSchema = + | { + finding: { extension?: unknown; quickfixes: { - manual?: boolean; - automatic?: boolean; - pseudo?: boolean; - ai_enabled?: boolean; - aiBasedQF?: boolean; + manual?: boolean; + automatic?: boolean; + pseudo?: boolean; + ai_enabled?: boolean; + aiBasedQF?: boolean; }; tags?: { - tag?: { - name?: string; - value?: string; - }[]; + tag?: { + name?: string; + value?: string; + }[]; }; uri?: string; parentUri?: string; @@ -44,47 +45,50 @@ export type AtcfindingSchema = { checksum?: number; remarkText?: string; remarkLink?: string; - }; -} | { - findingReferences: { + }; + } + | { + findingReferences: { findingReference?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }[]; - }; -} | { - items: { + }; + } + | { + items: { item?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - processor?: string; - status?: number; - remarkText?: string; - remarkLink?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + processor?: string; + status?: number; + remarkText?: string; + remarkLink?: string; }[]; - }; -} | { - remarks: { + }; + } + | { + remarks: { remark?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - remarkText?: string; - remarkLink?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + remarkText?: string; + remarkLink?: string; }[]; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/atcobject.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/atcobject.types.ts index df792f76..39ce397a 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/atcobject.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/atcobject.types.ts @@ -6,48 +6,23 @@ */ export type AtcobjectSchema = { - object: { + object: { + extension?: unknown; + findings: { + finding?: { extension?: unknown; - findings: { - finding?: { - extension?: unknown; - quickfixes: { - manual?: boolean; - automatic?: boolean; - pseudo?: boolean; - ai_enabled?: boolean; - aiBasedQF?: boolean; - }; - tags?: { - tag?: { - name?: string; - value?: string; - }[]; - }; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - location?: string; - effectOnTransports?: string; - priority?: string; - checkTitle?: string; - checkId?: string; - messageTitle?: string; - messageId?: string; - exemptionKind?: string; - exemptionApproval?: string; - noExemption?: string; - quickfixInfo?: string; - contactPerson?: string; - lastChangedBy?: string; - processor?: string; - checksum?: number; - remarkText?: string; - remarkLink?: string; - }[]; + quickfixes: { + manual?: boolean; + automatic?: boolean; + pseudo?: boolean; + ai_enabled?: boolean; + aiBasedQF?: boolean; + }; + tags?: { + tag?: { + name?: string; + value?: string; + }[]; }; uri?: string; parentUri?: string; @@ -55,7 +30,32 @@ export type AtcobjectSchema = { name?: string; packageName?: string; description?: string; - author?: string; - objectTypeId?: string; + location?: string; + effectOnTransports?: string; + priority?: string; + checkTitle?: string; + checkId?: string; + messageTitle?: string; + messageId?: string; + exemptionKind?: string; + exemptionApproval?: string; + noExemption?: string; + quickfixInfo?: string; + contactPerson?: string; + lastChangedBy?: string; + processor?: string; + checksum?: number; + remarkText?: string; + remarkLink?: string; + }[]; }; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + author?: string; + objectTypeId?: string; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/atcresult.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/atcresult.types.ts index b8f332da..e19cc86a 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/atcresult.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/atcresult.types.ts @@ -5,83 +5,85 @@ * Mode: Flattened */ -export type AtcresultSchema = { - resultList: { +export type AtcresultSchema = + | { + resultList: { result?: { - displayId: string; - title: string; - checkVariant: string; - runSeries: string; - createdAt: string; - aggregates: { - numPrio1: number; - numPrio2: number; - numPrio3: number; - numPrio4: number; - numFailure: number; - }; - objects: { - object?: { - extension?: unknown; - findings: { - finding?: { - extension?: unknown; - quickfixes: { - manual?: boolean; - automatic?: boolean; - pseudo?: boolean; - ai_enabled?: boolean; - aiBasedQF?: boolean; - }; - tags?: { - tag?: { - name?: string; - value?: string; - }[]; - }; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - location?: string; - effectOnTransports?: string; - priority?: string; - checkTitle?: string; - checkId?: string; - messageTitle?: string; - messageId?: string; - exemptionKind?: string; - exemptionApproval?: string; - noExemption?: string; - quickfixInfo?: string; - contactPerson?: string; - lastChangedBy?: string; - processor?: string; - checksum?: number; - remarkText?: string; - remarkLink?: string; - }[]; - }; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - author?: string; - objectTypeId?: string; + displayId: string; + title: string; + checkVariant: string; + runSeries: string; + createdAt: string; + aggregates: { + numPrio1: number; + numPrio2: number; + numPrio3: number; + numPrio4: number; + numFailure: number; + }; + objects: { + object?: { + extension?: unknown; + findings: { + finding?: { + extension?: unknown; + quickfixes: { + manual?: boolean; + automatic?: boolean; + pseudo?: boolean; + ai_enabled?: boolean; + aiBasedQF?: boolean; + }; + tags?: { + tag?: { + name?: string; + value?: string; + }[]; + }; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + location?: string; + effectOnTransports?: string; + priority?: string; + checkTitle?: string; + checkId?: string; + messageTitle?: string; + messageId?: string; + exemptionKind?: string; + exemptionApproval?: string; + noExemption?: string; + quickfixInfo?: string; + contactPerson?: string; + lastChangedBy?: string; + processor?: string; + checksum?: number; + remarkText?: string; + remarkLink?: string; }[]; - }; - infos: { - info?: { - type: string; - description: string; - }[]; - }; + }; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + author?: string; + objectTypeId?: string; + }[]; + }; + infos: { + info?: { + type: string; + description: string; + }[]; + }; }[]; + }; + } + | { + queryChoice: unknown; }; -} | { - queryChoice: unknown; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/atcresultquery.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/atcresultquery.types.ts index 174d0d69..28a33164 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/atcresultquery.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/atcresultquery.types.ts @@ -5,23 +5,26 @@ * Mode: Flattened */ -export type AtcresultquerySchema = { - activeResultQuery: { +export type AtcresultquerySchema = + | { + activeResultQuery: { includeAggregates: boolean; includeFindings: boolean; contactPerson: string; queryEnabled: boolean; - }; -} | { - specificResultQuery: { + }; + } + | { + specificResultQuery: { includeAggregates: boolean; includeFindings: boolean; contactPerson: string; queryEnabled: boolean; displayId: string; - }; -} | { - userResultQuery: { + }; + } + | { + userResultQuery: { includeAggregates: boolean; includeFindings: boolean; contactPerson: string; @@ -29,5 +32,5 @@ export type AtcresultquerySchema = { createdBy: string; ageMin: number; ageMax: number; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/atcworklist.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/atcworklist.types.ts index a43ff4e0..1a48ae75 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/atcworklist.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/atcworklist.types.ts @@ -5,58 +5,34 @@ * Mode: Flattened */ -export type AtcworklistSchema = { - worklist: { +export type AtcworklistSchema = + | { + worklist: { objectSets: { - objectSet?: { - name?: string; - title?: string; - kind?: string; - }[]; + objectSet?: { + name?: string; + title?: string; + kind?: string; + }[]; }; objects: { - object?: { + object?: { + extension?: unknown; + findings: { + finding?: { extension?: unknown; - findings: { - finding?: { - extension?: unknown; - quickfixes: { - manual?: boolean; - automatic?: boolean; - pseudo?: boolean; - ai_enabled?: boolean; - aiBasedQF?: boolean; - }; - tags?: { - tag?: { - name?: string; - value?: string; - }[]; - }; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - location?: string; - effectOnTransports?: string; - priority?: string; - checkTitle?: string; - checkId?: string; - messageTitle?: string; - messageId?: string; - exemptionKind?: string; - exemptionApproval?: string; - noExemption?: string; - quickfixInfo?: string; - contactPerson?: string; - lastChangedBy?: string; - processor?: string; - checksum?: number; - remarkText?: string; - remarkLink?: string; - }[]; + quickfixes: { + manual?: boolean; + automatic?: boolean; + pseudo?: boolean; + ai_enabled?: boolean; + aiBasedQF?: boolean; + }; + tags?: { + tag?: { + name?: string; + value?: string; + }[]; }; uri?: string; parentUri?: string; @@ -64,30 +40,56 @@ export type AtcworklistSchema = { name?: string; packageName?: string; description?: string; - author?: string; - objectTypeId?: string; - }[]; + location?: string; + effectOnTransports?: string; + priority?: string; + checkTitle?: string; + checkId?: string; + messageTitle?: string; + messageId?: string; + exemptionKind?: string; + exemptionApproval?: string; + noExemption?: string; + quickfixInfo?: string; + contactPerson?: string; + lastChangedBy?: string; + processor?: string; + checksum?: number; + remarkText?: string; + remarkLink?: string; + }[]; + }; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + author?: string; + objectTypeId?: string; + }[]; }; infos: { - info?: { - type: string; - description: string; - }[]; + info?: { + type: string; + description: string; + }[]; }; id: string; timestamp: string; usedObjectSet?: string; objectSetIsComplete?: boolean; - }; -} | { - worklistRun: { + }; + } + | { + worklistRun: { worklistId: string; worklistTimestamp: string; infos: { - info?: { - type: string; - description: string; - }[]; + info?: { + type: string; + description: string; + }[]; }; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/checklist.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/checklist.types.ts index 3da4a4c6..683ac591 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/checklist.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/checklist.types.ts @@ -6,42 +6,42 @@ */ export type ChecklistSchema = { - messages: { - msg?: { - shortText: { - txt: string[]; - }; - longText?: { - txt: string[]; - }; - t100Key?: { - msgno?: number; - msgid?: string; - msgv1?: string; - msgv2?: string; - msgv3?: string; - msgv4?: string; - }; - correctionHint?: { - number?: number; - kind?: string; - line?: number; - column?: number; - word?: string; - }[]; - objDescr: string; - type: unknown; - line?: number; - offset?: number; - href?: string; - forceSupported?: boolean; - code?: string; - }[]; - properties: { - checkExecuted?: boolean; - activationExecuted?: boolean; - generationExecuted?: boolean; - }; - forceSupported?: boolean; + messages: { + msg?: { + shortText: { + txt: string[]; + }; + longText?: { + txt: string[]; + }; + t100Key?: { + msgno?: number; + msgid?: string; + msgv1?: string; + msgv2?: string; + msgv3?: string; + msgv4?: string; + }; + correctionHint?: { + number?: number; + kind?: string; + line?: number; + column?: number; + word?: string; + }[]; + objDescr: string; + type: unknown; + line?: number; + offset?: number; + href?: string; + forceSupported?: boolean; + code?: string; + }[]; + properties: { + checkExecuted?: boolean; + activationExecuted?: boolean; + generationExecuted?: boolean; }; + forceSupported?: boolean; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/checkrun.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/checkrun.types.ts index 84fb5445..56457e50 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/checkrun.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/checkrun.types.ts @@ -5,64 +5,74 @@ * Mode: Flattened */ -export type CheckrunSchema = { - checkObjectList: { +export type CheckrunSchema = + | { + checkObjectList: { checkObject?: { - extension?: unknown; - artifacts?: { - artifact?: { - content?: string; - uri?: string; - contentType?: string; - }[]; + extension?: unknown; + artifacts?: { + artifact?: { + content?: string; + uri?: string; + contentType?: string; }[]; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; + }[]; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; }[]; - }; -} | { - checkRunReports: { + }; + } + | { + checkRunReports: { checkReport?: { - checkMessageList?: { - checkMessage?: { - t100Key?: { - msgno?: number; - msgid?: string; - msgv1?: string; - msgv2?: string; - msgv3?: string; - msgv4?: string; - }; - correctionHint?: { - number?: number; - kind?: string; - line?: number; - column?: number; - word?: string; - }[]; - uri?: string; - type?: unknown; - shortText?: string; - category?: string; - code?: string; - }[]; - }; - reporter?: string; - triggeringUri?: string; - status?: string; - statusText?: string; + checkMessageList?: { + checkMessage?: { + t100Key?: { + msgno?: number; + msgid?: string; + msgv1?: string; + msgv2?: string; + msgv3?: string; + msgv4?: string; + }; + correctionHint?: { + number?: number; + kind?: string; + line?: number; + column?: number; + word?: string; + }[]; + uri?: string; + type?: unknown; + shortText?: string; + category?: string; + code?: string; + }[]; + }; + reporter?: string; + triggeringUri?: string; + status?: string; + statusText?: string; }[]; - }; -} | { - checkReporters: { + }; + } + | { + checkReporters: { reporter?: { - supportedType?: string[]; - name?: string; + supportedType?: string[]; + name?: string; }[]; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/classes.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/classes.types.ts index a1830de4..576e73fc 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/classes.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/classes.types.ts @@ -5,89 +5,61 @@ * Mode: Flattened */ -export type ClassesSchema = { - abapClass: { +export type ClassesSchema = + | { + abapClass: { containerRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; adtTemplate?: { - adtProperty?: { - _text?: string; - key?: string; - }[]; - name?: string; + adtProperty?: { + $value?: string; + key?: string; + }[]; + name?: string; }; packageRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; template?: { - property?: { - _text?: string; - key?: string; - }[]; - name?: string; + property?: { + $value?: string; + key?: string; + }[]; + name?: string; }; syntaxConfiguration?: { - language?: { - version?: string; - description?: string; - }; - objectUsage?: { - restricted?: boolean; - }; + language?: { + version?: string; + description?: string; + }; + objectUsage?: { + restricted?: boolean; + }; }; interfaceRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }[]; include?: { - containerRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - adtTemplate?: { - adtProperty?: { - _text?: string; - key?: string; - }[]; - name?: string; - }; - name: string; - type: string; - changedBy?: string; - changedAt?: string; - createdAt?: string; - createdBy?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; - description?: string; - descriptionTextLimit?: number; - language?: string; - sourceUri?: string; - includeType?: unknown; - }[]; - superClassRef?: { + containerRef?: { extension?: unknown; uri?: string; parentUri?: string; @@ -95,24 +67,60 @@ export type ClassesSchema = { name?: string; packageName?: string; description?: string; + }; + adtTemplate?: { + adtProperty?: { + $value?: string; + key?: string; + }[]; + name?: string; + }; + name: string; + type: string; + changedBy?: string; + changedAt?: string; + createdAt?: string; + createdBy?: string; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; + description?: string; + descriptionTextLimit?: number; + language?: string; + sourceUri?: string; + includeType?: unknown; + }[]; + superClassRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; messageClassRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; rootEntityRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; name: string; type: string; @@ -120,7 +128,14 @@ export type ClassesSchema = { changedAt?: string; createdAt?: string; createdBy?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; description?: string; descriptionTextLimit?: number; language?: string; @@ -129,7 +144,11 @@ export type ClassesSchema = { responsible?: string; abapLanguageVersion?: string; sourceUri?: string; - sourceObjectStatus?: "SAPStandardProduction" | "customerProduction" | "system" | "test"; + sourceObjectStatus?: + | 'SAPStandardProduction' + | 'customerProduction' + | 'system' + | 'test'; fixPointArithmetic?: boolean; activeUnicodeCheck?: boolean; modeled?: boolean; @@ -137,28 +156,29 @@ export type ClassesSchema = { final?: boolean; state?: string; abstract?: boolean; - visibility?: "private" | "protected" | "package" | "public"; + visibility?: 'private' | 'protected' | 'package' | 'public'; sharedMemoryEnabled?: boolean; constructorGenerated?: boolean; hasTests?: boolean; - }; -} | { - abapClassInclude: { + }; + } + | { + abapClassInclude: { containerRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; adtTemplate?: { - adtProperty?: { - _text?: string; - key?: string; - }[]; - name?: string; + adtProperty?: { + $value?: string; + key?: string; + }[]; + name?: string; }; name: string; type: string; @@ -166,11 +186,18 @@ export type ClassesSchema = { changedAt?: string; createdAt?: string; createdBy?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; description?: string; descriptionTextLimit?: number; language?: string; sourceUri?: string; includeType?: unknown; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/configuration.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/configuration.types.ts index f432768f..723f9375 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/configuration.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/configuration.types.ts @@ -6,19 +6,19 @@ */ export type ConfigurationSchema = { - configuration: { - properties: { - property: { - _text?: string; - key?: string; - isMandatory?: boolean; - }[]; - }; - client?: string; - configName?: string; - createdBy?: string; - createdAt?: string; - changedBy?: string; - changedAt?: string; + configuration: { + properties: { + property: { + $value?: string; + key?: string; + isMandatory?: boolean; + }[]; }; + client?: string; + configName?: string; + createdBy?: string; + createdAt?: string; + changedBy?: string; + changedAt?: string; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/configurations.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/configurations.types.ts index d6d1f631..80a2aefe 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/configurations.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/configurations.types.ts @@ -6,5 +6,5 @@ */ export type ConfigurationsSchema = { - configurations: unknown; + configurations: unknown; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/exception.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/exception.types.ts index 663b1ea6..5346b5da 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/exception.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/exception.types.ts @@ -6,26 +6,26 @@ */ export type ExceptionSchema = { - exception: { - namespace?: { - id?: string; - }; - type?: { - id?: string; - }; - message?: { - _text?: string; - lang?: string; - }; - localizedMessage?: { - _text?: string; - lang?: string; - }; - properties?: { - entry?: { - _text?: string; - key?: string; - }[]; - }; + exception: { + namespace?: { + id?: string; }; + type?: { + id?: string; + }; + message?: { + $value?: string; + lang?: string; + }; + localizedMessage?: { + $value?: string; + lang?: string; + }; + properties?: { + entry?: { + $value?: string; + key?: string; + }[]; + }; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/interfaces.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/interfaces.types.ts index e5fd59bc..fd1d150c 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/interfaces.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/interfaces.types.ts @@ -6,75 +6,86 @@ */ export type InterfacesSchema = { - abapInterface: { - containerRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - adtTemplate?: { - adtProperty?: { - _text?: string; - key?: string; - }[]; - name?: string; - }; - packageRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - template?: { - property?: { - _text?: string; - key?: string; - }[]; - name?: string; - }; - syntaxConfiguration?: { - language?: { - version?: string; - description?: string; - }; - objectUsage?: { - restricted?: boolean; - }; - }; - interfaceRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }[]; - name: string; - type: string; - changedBy?: string; - changedAt?: string; - createdAt?: string; - createdBy?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; + abapInterface: { + containerRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; + adtTemplate?: { + adtProperty?: { + $value?: string; + key?: string; + }[]; + name?: string; + }; + packageRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; + template?: { + property?: { + $value?: string; + key?: string; + }[]; + name?: string; + }; + syntaxConfiguration?: { + language?: { + version?: string; description?: string; - descriptionTextLimit?: number; - language?: string; - masterSystem?: string; - masterLanguage?: string; - responsible?: string; - abapLanguageVersion?: string; - sourceUri?: string; - sourceObjectStatus?: "SAPStandardProduction" | "customerProduction" | "system" | "test"; - fixPointArithmetic?: boolean; - activeUnicodeCheck?: boolean; - modeled?: boolean; + }; + objectUsage?: { + restricted?: boolean; + }; }; + interfaceRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }[]; + name: string; + type: string; + changedBy?: string; + changedAt?: string; + createdAt?: string; + createdBy?: string; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; + description?: string; + descriptionTextLimit?: number; + language?: string; + masterSystem?: string; + masterLanguage?: string; + responsible?: string; + abapLanguageVersion?: string; + sourceUri?: string; + sourceObjectStatus?: + | 'SAPStandardProduction' + | 'customerProduction' + | 'system' + | 'test'; + fixPointArithmetic?: boolean; + activeUnicodeCheck?: boolean; + modeled?: boolean; + }; }; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/log.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/log.types.ts index e60a3d52..ef21c0d0 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/log.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/log.types.ts @@ -5,58 +5,61 @@ * Mode: Flattened */ -export type LogSchema = { - logKeys: { +export type LogSchema = + | { + logKeys: { progVersion?: { - key?: { - value?: string; - calls?: number; - lastCall?: string; - }[]; - generatedAt?: string; + key?: { + value?: string; + calls?: number; + lastCall?: string; + }[]; + generatedAt?: string; }[]; base?: string; - }; -} | { - logEntry: { + }; + } + | { + logEntry: { fieldList: { - field?: { - value: { - e?: { - t?: boolean; - v?: string; - y?: string; - }; - s?: { - c: unknown[]; - t?: boolean; - }; - t?: { - c?: unknown[]; - t?: boolean; - }; - }; - name?: string; - }[]; + field?: { + value: { + e?: { + t?: boolean; + v?: string; + y?: string; + }; + s?: { + c: unknown[]; + t?: boolean; + }; + t?: { + c?: unknown[]; + t?: boolean; + }; + }; + name?: string; + }[]; }; - }; -} | { - collectionSummary: { + }; + } + | { + collectionSummary: { success?: { - server: { - name?: string; - }; + server: { + name?: string; + }; }; unreached?: { - server: { - name?: string; - }; + server: { + name?: string; + }; }; failed?: { - server?: string; - returnCode?: number; - errorMessage?: string; + server?: string; + returnCode?: number; + errorMessage?: string; }[]; collectedLogs?: number; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/logpoint.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/logpoint.types.ts index dec8c3fb..daa8dbce 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/logpoint.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/logpoint.types.ts @@ -5,29 +5,71 @@ * Mode: Flattened */ -export type LogpointSchema = { - logpoint: { +export type LogpointSchema = + | { + logpoint: { location?: { - includePosition?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - mainProgram?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; + includePosition?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; + mainProgram?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; }; definition?: { + description?: string; + subKey?: string; + fields?: string; + condition?: string; + rollareaCounter?: number; + usageType?: string; + createdBy?: string; + changedBy?: string; + changedAt?: string; + expiresAt?: string; + activityType?: string; + retentionTimeInDays?: number; + }; + activation?: { + users?: { + user?: { + name?: string; + }[]; + }; + servers?: { + server?: { + name?: string; + }[]; + }; + state?: string; + activatedBy?: string; + activeSince?: string; + activeUntil?: string; + inactivatedBy?: string; + inactiveSince?: string; + }; + }; + } + | { + logpointList: { + logpoint: { + summary?: { + shortInfo: string; + executions: number; + }; + definition?: { description?: string; subKey?: string; fields?: string; @@ -40,17 +82,17 @@ export type LogpointSchema = { expiresAt?: string; activityType?: string; retentionTimeInDays?: number; - }; - activation?: { + }; + activation?: { users?: { - user?: { - name?: string; - }[]; + user?: { + name?: string; + }[]; }; servers?: { - server?: { - name?: string; - }[]; + server?: { + name?: string; + }[]; }; state?: string; activatedBy?: string; @@ -58,92 +100,53 @@ export type LogpointSchema = { activeUntil?: string; inactivatedBy?: string; inactiveSince?: string; - }; - }; -} | { - logpointList: { - logpoint: { - summary?: { - shortInfo: string; - executions: number; - }; - definition?: { - description?: string; - subKey?: string; - fields?: string; - condition?: string; - rollareaCounter?: number; - usageType?: string; - createdBy?: string; - changedBy?: string; - changedAt?: string; - expiresAt?: string; - activityType?: string; - retentionTimeInDays?: number; - }; - activation?: { - users?: { - user?: { - name?: string; - }[]; - }; - servers?: { - server?: { - name?: string; - }[]; - }; - state?: string; - activatedBy?: string; - activeSince?: string; - activeUntil?: string; - inactivatedBy?: string; - inactiveSince?: string; - }; - location?: { - includePosition?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - mainProgram?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - }; - }; - }; -} | { - locationCheck: { - location?: { + }; + location?: { includePosition?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; mainProgram?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; + }; + }; + }; + } + | { + locationCheck: { + location?: { + includePosition?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; + mainProgram?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; }; message?: string; possible?: boolean; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/packagesV1.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/packagesV1.types.ts index cb29b15a..e5fbfa6f 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/packagesV1.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/packagesV1.types.ts @@ -5,145 +5,152 @@ * Mode: Flattened */ -export type PackagesV1Schema = { - package: { +export type PackagesV1Schema = + | { + package: { containerRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; adtTemplate?: { - adtProperty?: { - _text?: string; - key?: string; - }[]; - name?: string; + adtProperty?: { + $value?: string; + key?: string; + }[]; + name?: string; }; packageRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; attributes: { - packageType: unknown; - isPackageTypeEditable?: boolean; - isAddingObjectsAllowed?: boolean; - isAddingObjectsAllowedEditable?: boolean; - isEncapsulated?: boolean; - isEncapsulationEditable?: boolean; - isEncapsulationVisible?: boolean; - recordChanges?: boolean; - isRecordChangesEditable?: boolean; - isSwitchVisible?: boolean; - languageVersion?: "" | "2" | "5"; - isLanguageVersionEditable?: boolean; - isLanguageVersionVisible?: boolean; + packageType: unknown; + isPackageTypeEditable?: boolean; + isAddingObjectsAllowed?: boolean; + isAddingObjectsAllowedEditable?: boolean; + isEncapsulated?: boolean; + isEncapsulationEditable?: boolean; + isEncapsulationVisible?: boolean; + recordChanges?: boolean; + isRecordChangesEditable?: boolean; + isSwitchVisible?: boolean; + languageVersion?: '' | '2' | '5'; + isLanguageVersionEditable?: boolean; + isLanguageVersionVisible?: boolean; }; superPackage?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; extensionAlias: { - name?: string; - isVisible?: boolean; - isEditable?: boolean; + name?: string; + isVisible?: boolean; + isEditable?: boolean; }; switch: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - state?: "" | "undefined" | "on" | "off" | "stand-by"; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + state?: '' | 'undefined' | 'on' | 'off' | 'stand-by'; }; applicationComponent?: { + name?: string; + description?: string; + isVisible?: boolean; + isEditable?: boolean; + }; + transport: { + softwareComponent?: { name?: string; description?: string; + type?: string; + typeDescription?: string; isVisible?: boolean; isEditable?: boolean; - }; - transport: { - softwareComponent?: { - name?: string; - description?: string; - type?: string; - typeDescription?: string; - isVisible?: boolean; - isEditable?: boolean; - }; - transportLayer?: { - name?: string; - description?: string; - isVisible?: boolean; - isEditable?: boolean; - }; + }; + transportLayer?: { + name?: string; + description?: string; + isVisible?: boolean; + isEditable?: boolean; + }; }; translation?: { - relevance?: string; - relevanceDescription?: string; - isVisible?: boolean; + relevance?: string; + relevanceDescription?: string; + isVisible?: boolean; }; useAccesses: { - useAccess?: { - packageInterfaceRef: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - packageRef: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - severity?: "" | "none" | "error" | "warning" | "information" | "obsolet"; - }[]; - isVisible?: boolean; + useAccess?: { + packageInterfaceRef: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; + packageRef: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }; + severity?: + | '' + | 'none' + | 'error' + | 'warning' + | 'information' + | 'obsolet'; + }[]; + isVisible?: boolean; }; packageInterfaces: { - packageInterfaceRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }[]; - isVisible?: boolean; + packageInterfaceRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }[]; + isVisible?: boolean; }; subPackages: { - packageRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }[]; + packageRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }[]; }; name: string; type: string; @@ -151,7 +158,14 @@ export type PackagesV1Schema = { changedAt?: string; createdAt?: string; createdBy?: string; - version?: "" | "active" | "inactive" | "workingArea" | "new" | "partlyActive" | "activeWithInactiveVersion"; + version?: + | '' + | 'active' + | 'inactive' + | 'workingArea' + | 'new' + | 'partlyActive' + | 'activeWithInactiveVersion'; description?: string; descriptionTextLimit?: number; language?: string; @@ -159,42 +173,43 @@ export type PackagesV1Schema = { masterLanguage?: string; responsible?: string; abapLanguageVersion?: string; - }; -} | { - packageTree: { + }; + } + | { + packageTree: { treeNode?: { + extension?: unknown; + superPackageRef: { extension?: unknown; - superPackageRef: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }; - packageInterfaces: { - packageInterfaceRef?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; - }[]; - isVisible?: boolean; - }; uri?: string; parentUri?: string; type?: string; name?: string; packageName?: string; description?: string; - isEncapsulated?: boolean; - hasSubpackages?: boolean; - hasInterfaces?: boolean; + }; + packageInterfaces: { + packageInterfaceRef?: { + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + }[]; + isVisible?: boolean; + }; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; + isEncapsulated?: boolean; + hasSubpackages?: boolean; + hasInterfaces?: boolean; }[]; isSuperTree?: boolean; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/quickfixes.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/quickfixes.types.ts index 2169a233..b8895c8f 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/quickfixes.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/quickfixes.types.ts @@ -5,58 +5,62 @@ * Mode: Flattened */ -export type QuickfixesSchema = { - evaluationRequest: { +export type QuickfixesSchema = + | { + evaluationRequest: { affectedObjects?: { - unit?: { - content: string; - }[]; + unit?: { + content: string; + }[]; }; - }; -} | { - evaluationResults: { + }; + } + | { + evaluationResults: { evaluationResult?: { - userContent?: string; - affectedObjects?: unknown; + userContent?: string; + affectedObjects?: unknown; }[]; - }; -} | { - proposalRequest: { + }; + } + | { + proposalRequest: { input: { - content: string; + content: string; }; affectedObjects?: { - unit?: { - content: string; - }[]; + unit?: { + content: string; + }[]; }; userContent?: string; - }; -} | { - proposalResult: { + }; + } + | { + proposalResult: { deltas: { - unit?: { - content: string; - }[]; + unit?: { + content: string; + }[]; }; selection?: { - extension?: unknown; - uri?: string; - parentUri?: string; - type?: string; - name?: string; - packageName?: string; - description?: string; + extension?: unknown; + uri?: string; + parentUri?: string; + type?: string; + name?: string; + packageName?: string; + description?: string; }; variableSourceStates?: { - keepCursor?: boolean; + keepCursor?: boolean; }; statusMessages?: { - statusMessage?: { - severity: "info" | "warning"; - message: string; - id?: string; - }[]; + statusMessage?: { + severity: 'info' | 'warning'; + message: string; + id?: string; + }[]; }; + }; }; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/traces.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/traces.types.ts index 794bc74e..8f5381fc 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/traces.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/traces.types.ts @@ -5,35 +5,37 @@ * Mode: Flattened */ -export type TracesSchema = { - activations: { +export type TracesSchema = + | { + activations: { activation?: { - activationId: string; - deletionTime: string; - description: string; - enabled: boolean; - userFilter: string; - serverFilter: string; - requestTypeFilter: string; - requestNameFilter: string; - sensitiveDataAllowed: boolean; - createUser: string; - createTime: string; - changeUser: string; - changeTime: string; - components: { - component?: { - component: string; - traceLevel: number; - }[]; - }; - numberOfTraces?: number; - maxNumberOfTraces?: number; - noContent?: boolean; + activationId: string; + deletionTime: string; + description: string; + enabled: boolean; + userFilter: string; + serverFilter: string; + requestTypeFilter: string; + requestNameFilter: string; + sensitiveDataAllowed: boolean; + createUser: string; + createTime: string; + changeUser: string; + changeTime: string; + components: { + component?: { + component: string; + traceLevel: number; + }[]; + }; + numberOfTraces?: number; + maxNumberOfTraces?: number; + noContent?: boolean; }[]; - }; -} | { - activation: { + }; + } + | { + activation: { activationId: string; deletionTime: string; description: string; @@ -48,105 +50,39 @@ export type TracesSchema = { changeUser: string; changeTime: string; components: { - component?: { - component: string; - traceLevel: number; - }[]; + component?: { + component: string; + traceLevel: number; + }[]; }; numberOfTraces?: number; maxNumberOfTraces?: number; noContent?: boolean; - }; -} | { - traces: { + }; + } + | { + traces: { trace?: { - traceId: string; - user: string; - server: string; - creationTime: string; - description: string; - deletionTime: string; - requestType: string; - requestName: string; - eppTransactionId: string; - eppRootContextId: string; - eppConnectionId: string; - eppConnectionCounter: number; - properties: { - property?: { - component: string; - key: string; - value: string; - }[]; - }; - activation?: { - activationId: string; - deletionTime: string; - description: string; - enabled: boolean; - userFilter: string; - serverFilter: string; - requestTypeFilter: string; - requestNameFilter: string; - sensitiveDataAllowed: boolean; - createUser: string; - createTime: string; - changeUser: string; - changeTime: string; - components: { - component?: { - component: string; - traceLevel: number; - }[]; - }; - numberOfTraces?: number; - maxNumberOfTraces?: number; - noContent?: boolean; - }; - recordsSummary?: { - componentNames?: { - componentName?: string[]; - }; - numberOfRecords: number; - minRecordsTimestamp: string; - maxRecordsTimestamp: string; - contentSize: number; - }; - originalImportMetadata?: { - originalTraceId: string; - originalTraceSystem: string; - originalTraceClient: string; - originalTraceServer: string; - originalTraceUser: string; - originalChangeUser: string; - originalCreateUser: string; - originalHeaderUserAttributeDev: string; - originalHeaderTimestamp: string; - }; - }[]; - }; -} | { - trace: { - traceId: string; - user: string; - server: string; - creationTime: string; - description: string; - deletionTime: string; - requestType: string; - requestName: string; - eppTransactionId: string; - eppRootContextId: string; - eppConnectionId: string; - eppConnectionCounter: number; - properties: { + traceId: string; + user: string; + server: string; + creationTime: string; + description: string; + deletionTime: string; + requestType: string; + requestName: string; + eppTransactionId: string; + eppRootContextId: string; + eppConnectionId: string; + eppConnectionCounter: number; + properties: { property?: { - component: string; - key: string; - value: string; + component: string; + key: string; + value: string; }[]; - }; - activation?: { + }; + activation?: { activationId: string; deletionTime: string; description: string; @@ -161,25 +97,25 @@ export type TracesSchema = { changeUser: string; changeTime: string; components: { - component?: { - component: string; - traceLevel: number; - }[]; + component?: { + component: string; + traceLevel: number; + }[]; }; numberOfTraces?: number; maxNumberOfTraces?: number; noContent?: boolean; - }; - recordsSummary?: { + }; + recordsSummary?: { componentNames?: { - componentName?: string[]; + componentName?: string[]; }; numberOfRecords: number; minRecordsTimestamp: string; maxRecordsTimestamp: string; contentSize: number; - }; - originalImportMetadata?: { + }; + originalImportMetadata?: { originalTraceId: string; originalTraceSystem: string; originalTraceClient: string; @@ -189,43 +125,113 @@ export type TracesSchema = { originalCreateUser: string; originalHeaderUserAttributeDev: string; originalHeaderTimestamp: string; + }; + }[]; + }; + } + | { + trace: { + traceId: string; + user: string; + server: string; + creationTime: string; + description: string; + deletionTime: string; + requestType: string; + requestName: string; + eppTransactionId: string; + eppRootContextId: string; + eppConnectionId: string; + eppConnectionCounter: number; + properties: { + property?: { + component: string; + key: string; + value: string; + }[]; }; - }; -} | { - records: { + activation?: { + activationId: string; + deletionTime: string; + description: string; + enabled: boolean; + userFilter: string; + serverFilter: string; + requestTypeFilter: string; + requestNameFilter: string; + sensitiveDataAllowed: boolean; + createUser: string; + createTime: string; + changeUser: string; + changeTime: string; + components: { + component?: { + component: string; + traceLevel: number; + }[]; + }; + numberOfTraces?: number; + maxNumberOfTraces?: number; + noContent?: boolean; + }; + recordsSummary?: { + componentNames?: { + componentName?: string[]; + }; + numberOfRecords: number; + minRecordsTimestamp: string; + maxRecordsTimestamp: string; + contentSize: number; + }; + originalImportMetadata?: { + originalTraceId: string; + originalTraceSystem: string; + originalTraceClient: string; + originalTraceServer: string; + originalTraceUser: string; + originalChangeUser: string; + originalCreateUser: string; + originalHeaderUserAttributeDev: string; + originalHeaderTimestamp: string; + }; + }; + } + | { + records: { record?: { - traceId: string; - recordNumber: number; - parentNumber?: number; - creationTime: string; - traceComponent?: string; - traceObject?: string; - traceProcedure?: string; - traceLevel: number; - callStack?: string; - message?: string; - contentType?: string; - hierarchyType?: string; - hierarchyNumber?: number; - hierarchiesLevel?: number; - content?: string; - contentLength?: number; - properties?: { - property?: { - component: string; - key: string; - value: string; - }[]; - }; - options?: { - noSensitiveData?: boolean; - callStackOffset?: number; - fullCallStack?: boolean; - highlighting?: string; - }; - processedObjects?: string; + traceId: string; + recordNumber: number; + parentNumber?: number; + creationTime: string; + traceComponent?: string; + traceObject?: string; + traceProcedure?: string; + traceLevel: number; + callStack?: string; + message?: string; + contentType?: string; + hierarchyType?: string; + hierarchyNumber?: number; + hierarchiesLevel?: number; + content?: string; + contentLength?: number; + properties?: { + property?: { + component: string; + key: string; + value: string; + }[]; + }; + options?: { + noSensitiveData?: boolean; + callStackOffset?: number; + fullCallStack?: boolean; + highlighting?: string; + }; + processedObjects?: string; }[]; + }; + } + | { + uriMapping: unknown; }; -} | { - uriMapping: unknown; -}; diff --git a/packages/adt-schemas/src/schemas/generated/types/sap/transportmanagment.types.ts b/packages/adt-schemas/src/schemas/generated/types/sap/transportmanagment.types.ts index d009e53e..486cd26c 100644 --- a/packages/adt-schemas/src/schemas/generated/types/sap/transportmanagment.types.ts +++ b/packages/adt-schemas/src/schemas/generated/types/sap/transportmanagment.types.ts @@ -6,503 +6,503 @@ */ export type TransportmanagmentSchema = { - root: { - workbench: { - target?: { - modifiable: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - relstarted: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - released: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; + root: { + workbench: { + target?: { + modifiable: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; name?: string; - desc?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; }[]; - modifiable: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - relstarted: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - released: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - category?: string; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; }; - customizing: { - target?: { - modifiable: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - relstarted: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - released: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; + relstarted: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; name?: string; - desc?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; }[]; - modifiable: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - relstarted: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - released: { - request?: { - task?: { - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - abap_object?: { - pgmid?: string; - type?: string; - name?: string; - wbtype?: string; - uri?: string; - dummy_uri?: string; - obj_info?: string; - obj_desc?: string; - }[]; - number?: string; - owner?: string; - desc?: string; - status?: string; - uri?: string; - }[]; - status?: string; - }; - category?: string; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; }; - releasereports: { - checkReport?: { - checkMessageList?: { - checkMessage?: { - t100Key?: { - msgno?: number; - msgid?: string; - msgv1?: string; - msgv2?: string; - msgv3?: string; - msgv4?: string; - }; - correctionHint?: { - number?: number; - kind?: string; - line?: number; - column?: number; - word?: string; - }[]; - uri?: string; - type?: unknown; - shortText?: string; - category?: string; - code?: string; - }[]; - }; - reporter?: string; - triggeringUri?: string; - status?: string; - statusText?: string; + released: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; }; - targetuser?: string; - useraction?: string; - releasetimestamp?: string; - releaseobjlock?: string; - number?: string; + name?: string; desc?: string; - uri?: string; + }[]; + modifiable: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + relstarted: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + released: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + category?: string; + }; + customizing: { + target?: { + modifiable: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + relstarted: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + released: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + name?: string; + desc?: string; + }[]; + modifiable: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + relstarted: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + released: { + request?: { + task?: { + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + abap_object?: { + pgmid?: string; + type?: string; + name?: string; + wbtype?: string; + uri?: string; + dummy_uri?: string; + obj_info?: string; + obj_desc?: string; + }[]; + number?: string; + owner?: string; + desc?: string; + status?: string; + uri?: string; + }[]; + status?: string; + }; + category?: string; + }; + releasereports: { + checkReport?: { + checkMessageList?: { + checkMessage?: { + t100Key?: { + msgno?: number; + msgid?: string; + msgv1?: string; + msgv2?: string; + msgv3?: string; + msgv4?: string; + }; + correctionHint?: { + number?: number; + kind?: string; + line?: number; + column?: number; + word?: string; + }[]; + uri?: string; + type?: unknown; + shortText?: string; + category?: string; + code?: string; + }[]; + }; + reporter?: string; + triggeringUri?: string; + status?: string; + statusText?: string; + }[]; }; + targetuser?: string; + useraction?: string; + releasetimestamp?: string; + releaseobjlock?: string; + number?: string; + desc?: string; + uri?: string; + }; }; diff --git a/packages/adt-schemas/tests/scenarios/atc.test.ts b/packages/adt-schemas/tests/scenarios/atc.test.ts index db167ccd..6ed4b6b9 100644 --- a/packages/adt-schemas/tests/scenarios/atc.test.ts +++ b/packages/adt-schemas/tests/scenarios/atc.test.ts @@ -21,25 +21,29 @@ class AtcCustomizingScenario extends Scenario { // parse() now returns wrapped format: { elementName: content } const customizing = (data as any).customizing; expect(customizing).toBeDefined(); - + // Properties expect(customizing.properties).toBeDefined(); expect(customizing.properties?.property).toBeDefined(); expect(customizing.properties?.property?.length).toBeGreaterThan(0); - + // Check for systemCheckVariant property - const checkVariant = customizing.properties?.property?.find((p: any) => p.name === 'systemCheckVariant'); + const checkVariant = customizing.properties?.property?.find( + (p: any) => p.name === 'systemCheckVariant', + ); expect(checkVariant).toBeDefined(); expect(checkVariant?.value).toBe('DEFAULT_CHECK_VARIANT'); - + // Exemption reasons expect(customizing.exemption).toBeDefined(); expect(customizing.exemption?.reasons).toBeDefined(); expect(customizing.exemption?.reasons?.reason).toBeDefined(); expect(customizing.exemption?.reasons?.reason?.length).toBeGreaterThan(0); - + // Check for FPOS reason - const fposReason = customizing.exemption?.reasons?.reason?.find((r: any) => r.id === 'FPOS'); + const fposReason = customizing.exemption?.reasons?.reason?.find( + (r: any) => r.id === 'FPOS', + ); expect(fposReason).toBeDefined(); expect(fposReason?.justificationMandatory).toBe(true); } @@ -63,32 +67,36 @@ class AtcWorklistScenario extends Scenario { // parse() now returns wrapped format: { elementName: content } const worklist = (data as any).worklist; expect(worklist).toBeDefined(); - + // Root attributes expect(worklist.id).toBeDefined(); expect(worklist.timestamp).toBeDefined(); expect(worklist.usedObjectSet).toBeDefined(); expect(worklist.objectSetIsComplete).toBe(true); - + // Object sets expect(worklist.objectSets).toBeDefined(); expect(worklist.objectSets?.objectSet).toBeDefined(); expect(worklist.objectSets?.objectSet?.length).toBeGreaterThanOrEqual(2); - + // Check for ALL object set - const allSet = worklist.objectSets?.objectSet?.find((s: any) => s.kind === 'ALL'); + const allSet = worklist.objectSets?.objectSet?.find( + (s: any) => s.kind === 'ALL', + ); expect(allSet).toBeDefined(); expect(allSet?.title).toBe('All Objects'); - + // Check for TRANSPORT object set - const transportSet = worklist.objectSets?.objectSet?.find((s: any) => s.kind === 'TRANSPORT'); + const transportSet = worklist.objectSets?.objectSet?.find( + (s: any) => s.kind === 'TRANSPORT', + ); expect(transportSet).toBeDefined(); - + // Objects expect(worklist.objects).toBeDefined(); expect(worklist.objects?.object).toBeDefined(); expect(worklist.objects?.object?.length).toBeGreaterThan(0); - + // Check first object has required attributes const firstObj = worklist.objects?.object?.[0]; expect(firstObj?.uri).toBeDefined(); @@ -96,32 +104,39 @@ class AtcWorklistScenario extends Scenario { expect(firstObj?.name).toBeDefined(); expect(firstObj?.packageName).toBeDefined(); expect(firstObj?.author).toBeDefined(); - + // Check for object with findings - const objWithFindings = worklist.objects?.object?.find((o: any) => - o.findings?.finding && o.findings.finding.length > 0 + const objWithFindings = worklist.objects?.object?.find( + (o: any) => o.findings?.finding && o.findings.finding.length > 0, ); expect(objWithFindings).toBeDefined(); - + // Validate finding structure - findings are parsed with atcfinding namespace attributes - const finding = objWithFindings?.findings?.finding?.[0] as Record; + const finding = objWithFindings?.findings?.finding?.[0] as Record< + string, + unknown + >; expect(finding).toBeDefined(); // Attributes may be parsed with or without namespace prefix depending on schema expect(finding?.uri ?? finding?.['atcfinding:uri']).toBeDefined(); - + // Infos expect(worklist.infos).toBeDefined(); expect(worklist.infos?.info).toBeDefined(); expect(worklist.infos?.info?.length).toBeGreaterThan(0); - + // Check for FINDING_STATS info - const statsInfo = worklist.infos?.info?.find((i: any) => i.type === 'FINDING_STATS'); + const statsInfo = worklist.infos?.info?.find( + (i: any) => i.type === 'FINDING_STATS', + ); expect(statsInfo).toBeDefined(); expect(statsInfo?.description).toBeDefined(); } override validateBuilt(xml: string): void { - expect(xml).toContain('xmlns:atcworklist="http://www.sap.com/adt/atc/worklist"'); + expect(xml).toContain( + 'xmlns:atcworklist="http://www.sap.com/adt/atc/worklist"', + ); expect(xml).toContain('atcworklist:id='); expect(xml).toContain('atcworklist:objectSets'); expect(xml).toContain('atcworklist:objects'); diff --git a/packages/adt-schemas/tests/scenarios/base/scenario.ts b/packages/adt-schemas/tests/scenarios/base/scenario.ts index 6ea074c7..3482d22f 100644 --- a/packages/adt-schemas/tests/scenarios/base/scenario.ts +++ b/packages/adt-schemas/tests/scenarios/base/scenario.ts @@ -22,10 +22,10 @@ export abstract class Scenario { abstract readonly schema: S; /** Fixture handles from adt-fixtures */ abstract readonly fixtures: FixtureHandle[]; - + /** Validate parsed object - fully typed */ abstract validateParsed(parsed: SchemaType): void; - + /** Optional: Validate built XML */ validateBuilt?(xml: string): void; } @@ -33,7 +33,7 @@ export abstract class Scenario { /** * Run a scenario as a standalone test suite. * Call this from each *.test.ts file. - * + * * @example * ```ts * // classes.test.ts @@ -42,39 +42,45 @@ export abstract class Scenario { * runScenario(new ClassesScenario()); * ``` */ -export function runScenario(scenario: Scenario): void { +export function runScenario( + scenario: Scenario, +): void { describe(scenario.constructor.name, () => { for (const fixture of scenario.fixtures) { describe(fixture.path.replace('.xml', ''), () => { // State shared between tests - const state: { xml: string; parsed: SchemaType | null; built: string } = { - xml: '', - parsed: null, - built: '' + const state: { + xml: string; + parsed: SchemaType | null; + built: string; + } = { + xml: '', + parsed: null, + built: '', }; - + beforeAll(async () => { state.xml = await fixture.load(); state.parsed = scenario.schema.parse(state.xml) as SchemaType; state.built = scenario.schema.build!(state.parsed); }); - + it('parses', () => { expect(state.parsed).toBeDefined(); }); - + it('validates parsed', () => { scenario.validateParsed(state.parsed!); }); - + it('builds', () => { expect(state.built).toContain(' { scenario.validateBuilt?.(state.built); }); - + it('round-trips', () => { const parsed2 = scenario.schema.parse(state.built); const built2 = scenario.schema.build!(parsed2 as SchemaType); @@ -83,4 +89,4 @@ export function runScenario(scenario: Scenario): vo }); } }); -} \ No newline at end of file +} diff --git a/packages/adt-schemas/tests/scenarios/classes.test.ts b/packages/adt-schemas/tests/scenarios/classes.test.ts index 02085317..4481b980 100644 --- a/packages/adt-schemas/tests/scenarios/classes.test.ts +++ b/packages/adt-schemas/tests/scenarios/classes.test.ts @@ -5,10 +5,10 @@ import { classes } from '../../src/schemas/index'; /** * Test for ABAP class response - GET /sap/bc/adt/oo/classes/{name} - * + * * Fixture: ZCL_SAMPLE_CLASS (sanitized from real SAP response) * Source: GET /sap/bc/adt/oo/classes/zcl_sample_class - * + * * Note: This schema has multiple root elements (abapClass, abapClassInclude). * This test uses AbapClass type specifically since the fixture is an AbapClass. */ @@ -20,21 +20,21 @@ class ClassesScenario extends Scenario { // parse() now returns wrapped format: { elementName: content } const abapClass = (data as any).abapClass; expect(abapClass).toBeDefined(); - + // Root class: attributes expect(abapClass.final).toBe(true); expect(abapClass.abstract).toBe(false); expect(abapClass.visibility).toBe('public'); expect(abapClass.category).toBe('generalObjectType'); expect(abapClass.sharedMemoryEnabled).toBe(false); - + // Inherited abapoo: attributes expect(abapClass.modeled).toBe(false); - + // Inherited abapsource: attributes expect(abapClass.fixPointArithmetic).toBe(true); expect(abapClass.activeUnicodeCheck).toBe(true); - + // Inherited adtcore: attributes expect(abapClass.name).toBe('ZCL_SAMPLE_CLASS'); expect(abapClass.type).toBe('CLAS/OC'); @@ -44,21 +44,23 @@ class ClassesScenario extends Scenario { expect(abapClass.version).toBe('active'); expect(abapClass.changedBy).toBe('DEVELOPER'); expect(abapClass.createdBy).toBe('DEVELOPER'); - + // Package reference expect(abapClass.packageRef).toBeDefined(); expect(abapClass.packageRef?.name).toBe('$TMP'); expect(abapClass.packageRef?.type).toBe('DEVC/K'); - + // Syntax configuration expect(abapClass.syntaxConfiguration).toBeDefined(); expect(abapClass.syntaxConfiguration?.language?.version).toBe('X'); - expect(abapClass.syntaxConfiguration?.language?.description).toBe('Standard ABAP'); - + expect(abapClass.syntaxConfiguration?.language?.description).toBe( + 'Standard ABAP', + ); + // Class includes (definitions, implementations, macros, testclasses, main) expect(abapClass.include).toBeDefined(); expect(abapClass.include).toHaveLength(5); - + // Verify include types // Note: Using 'any' because TypeScript hits recursion limit on deeply nested schema types const includeTypes = abapClass.include?.map((inc: any) => inc.includeType); @@ -67,9 +69,11 @@ class ClassesScenario extends Scenario { expect(includeTypes).toContain('macros'); expect(includeTypes).toContain('testclasses'); expect(includeTypes).toContain('main'); - + // Check main include details - const mainInclude = abapClass.include?.find((inc: any) => inc.includeType === 'main'); + const mainInclude = abapClass.include?.find( + (inc: any) => inc.includeType === 'main', + ); expect(mainInclude).toBeDefined(); expect(mainInclude?.sourceUri).toBe('source/main'); expect(mainInclude?.type).toBe('CLAS/I'); @@ -78,10 +82,10 @@ class ClassesScenario extends Scenario { override validateBuilt(xml: string): void { // Root element with namespace (schema uses 'class' prefix per $xmlns) expect(xml).toContain('xmlns:class="http://www.sap.com/adt/oo/classes"'); - + // Root element name expect(xml).toContain(' { // parse() now returns wrapped format: { elementName: content } const abapInterface = (data as any).abapInterface; expect(abapInterface).toBeDefined(); - + // Cast to any for runtime property access (inherited properties not inferred) const parsed = abapInterface as unknown as Record; - + // Inherited abapoo: attributes expect(parsed.modeled).toBe(false); - + // Inherited abapsource: attributes expect(parsed.sourceUri).toBe('source/main'); expect(parsed.fixPointArithmetic).toBe(false); expect(parsed.activeUnicodeCheck).toBe(false); - + // Inherited adtcore: attributes expect(parsed.name).toBe('ZIF_SAMPLE_INTERFACE'); expect(parsed.type).toBe('INTF/OI'); @@ -42,20 +42,20 @@ class InterfacesScenario extends Scenario { expect(parsed.version).toBe('active'); expect(parsed.changedBy).toBe('DEVELOPER'); expect(parsed.createdBy).toBe('DEVELOPER'); - + // Package reference expect(parsed.packageRef).toBeDefined(); const packageRef = parsed.packageRef as Record; expect(packageRef?.name).toBe('$TMP'); expect(packageRef?.type).toBe('DEVC/K'); - + // Syntax configuration expect(parsed.syntaxConfiguration).toBeDefined(); const syntaxConfig = parsed.syntaxConfiguration as Record; const language = syntaxConfig?.language as Record; expect(language?.version).toBe('X'); expect(language?.description).toBe('Standard ABAP'); - + // Links (atom:link elements) expect(parsed.link).toBeDefined(); expect(Array.isArray(parsed.link)).toBe(true); @@ -65,11 +65,11 @@ class InterfacesScenario extends Scenario { override validateBuilt(xml: string): void { // Root element with namespace (schema uses 'intf' prefix from XSD) expect(xml).toContain('xmlns:intf="http://www.sap.com/adt/oo/interfaces"'); - + // Interface attributes (attributes don't have namespace prefix) expect(xml).toContain('modeled="false"'); expect(xml).toContain('sourceUri="source/main"'); - + // Inherited adtcore attributes expect(xml).toContain('name="ZIF_SAMPLE_INTERFACE"'); expect(xml).toContain('type="INTF/OI"'); diff --git a/packages/adt-schemas/tests/scenarios/packages.test.ts b/packages/adt-schemas/tests/scenarios/packages.test.ts index 5e67b3fa..f82159e3 100644 --- a/packages/adt-schemas/tests/scenarios/packages.test.ts +++ b/packages/adt-schemas/tests/scenarios/packages.test.ts @@ -5,7 +5,7 @@ import { packagesV1 } from '../../src/schemas/index'; /** * Test for package response - GET /sap/bc/adt/packages/{name} - * + * * Fixture: $TMP package (system temporary package) * Source: GET /sap/bc/adt/packages/%24TMP */ @@ -17,7 +17,7 @@ class PackagesScenario extends Scenario { // parse() now returns wrapped format: { elementName: content } const pkg = (data as any).package; expect(pkg).toBeDefined(); - + // Root adtcore: attributes expect(pkg.name).toBe('$TMP'); expect(pkg.type).toBe('DEVC/K'); @@ -28,19 +28,21 @@ class PackagesScenario extends Scenario { expect(pkg.version).toBe('active'); expect(pkg.changedBy).toBe('SAP'); expect(pkg.createdBy).toBe('SAP'); - + // Package attributes expect(pkg.attributes).toBeDefined(); expect(pkg.attributes?.packageType).toBe('development'); expect(pkg.attributes?.isEncapsulated).toBe(false); expect(pkg.attributes?.isAddingObjectsAllowed).toBe(false); expect(pkg.attributes?.recordChanges).toBe(false); - + // Transport properties expect(pkg.transport).toBeDefined(); expect(pkg.transport?.softwareComponent?.name).toBe('LOCAL'); - expect(pkg.transport?.softwareComponent?.description).toBe('Local Developments (No Automatic Transport)'); - + expect(pkg.transport?.softwareComponent?.description).toBe( + 'Local Developments (No Automatic Transport)', + ); + // Subpackages expect(pkg.subPackages).toBeDefined(); expect(pkg.subPackages?.packageRef).toBeDefined(); @@ -53,16 +55,16 @@ class PackagesScenario extends Scenario { // Root element with namespace (schema uses 'pak' prefix from XSD) expect(xml).toContain('xmlns:pak="http://www.sap.com/adt/packages"'); expect(xml).toContain('name="$TMP"'); - + // Package attributes (attributes are output without namespace prefix) expect(xml).toContain('packageType="development"'); expect(xml).toContain('isEncapsulated="false"'); - + // Transport expect(xml).toContain(' { // The search response uses 'objectReferences' as root element const objectReferences = (data as any).objectReferences; expect(objectReferences).toBeDefined(); - + // Cast to any to access dynamic properties from search response const merged = objectReferences as unknown as Record; diff --git a/packages/adt-schemas/tests/scenarios/sessions.test.ts b/packages/adt-schemas/tests/scenarios/sessions.test.ts index 280b0bb9..f86762c9 100644 --- a/packages/adt-schemas/tests/scenarios/sessions.test.ts +++ b/packages/adt-schemas/tests/scenarios/sessions.test.ts @@ -15,23 +15,26 @@ class SessionsScenario extends Scenario { validateParsed(data: SchemaType): void { console.log('Parsed data:', JSON.stringify(data, null, 2)); - + // parse() now returns wrapped format: { elementName: content } const session = (data as any).session; expect(session).toBeDefined(); - + // Validate properties structure expect(session.properties).toBeDefined(); expect(session.properties?.property).toBeDefined(); expect(Array.isArray(session.properties?.property)).toBe(true); // Validate inactivity timeout property - const timeoutProp = session.properties?.property?.find((p: any) => p.name === 'inactivityTimeout'); + const timeoutProp = session.properties?.property?.find( + (p: any) => p.name === 'inactivityTimeout', + ); expect(timeoutProp).toBeDefined(); expect(timeoutProp?.name).toBe('inactivityTimeout'); // Type assertions - verify full typing (using actual parsed structure) - const propName: string | undefined = session.properties?.property?.[0]?.name; + const propName: string | undefined = + session.properties?.property?.[0]?.name; // Suppress unused variable warnings void propName; diff --git a/packages/adt-schemas/tests/scenarios/tm.test.ts b/packages/adt-schemas/tests/scenarios/tm.test.ts index 691c2189..08526e2e 100644 --- a/packages/adt-schemas/tests/scenarios/tm.test.ts +++ b/packages/adt-schemas/tests/scenarios/tm.test.ts @@ -1,7 +1,10 @@ import { expect } from 'vitest'; import { fixtures } from 'adt-fixtures'; import { Scenario, runScenario, type SchemaType } from './base/scenario'; -import { transportmanagmentCreate, transportmanagmentSingle } from '../../src/schemas/index'; +import { + transportmanagmentCreate, + transportmanagmentSingle, +} from '../../src/schemas/index'; /** * Test for task response - when fetching a task by number: @@ -17,17 +20,17 @@ class TmTaskScenario extends Scenario { // parse() now returns wrapped format: { elementName: content } const root = (data as any).root; expect(root).toBeDefined(); - + // Root attributes - object_type="T" indicates task expect(root.object_type).toBe('T'); - expect(root.name).toBe('DEVK900002'); // Task number in root - + expect(root.name).toBe('DEVK900002'); // Task number in root + // Parent request is included (NO tasks inside when fetching a task!) expect(root.request).toBeDefined(); - expect(root.request?.number).toBe('DEVK900001'); // Parent request number + expect(root.request?.number).toBe('DEVK900001'); // Parent request number // When fetching a task, parent request has no tasks (empty or undefined) expect(root.request?.task?.length ?? 0).toBe(0); - + // Task at root level expect(root.task).toBeDefined(); expect(root.task).toHaveLength(1); @@ -56,7 +59,7 @@ class TmCreateScenario extends Scenario { // parse() now returns wrapped format: { elementName: content } const root = (data as any).root; expect(root).toBeDefined(); - + expect(root.useraction).toBe('newrequest'); expect(root.request).toBeDefined(); expect(root.request?.desc).toBe('Test transport description'); @@ -83,10 +86,10 @@ class TmFullScenario extends Scenario { // parse() now returns wrapped format: { elementName: content } const root = (data as any).root; expect(root).toBeDefined(); - + // Root tm: attributes expect(root.object_type).toBe('K'); - + // Root adtcore: attributes (inherited from AdtObject) expect(root.type).toBe('RQRQ'); expect(root.name).toBe('DEVK900001'); @@ -94,7 +97,7 @@ class TmFullScenario extends Scenario { expect(root.changedAt).toBe('2025-11-29T19:31:44Z'); expect(root.changedBy).toBe('DEVELOPER'); expect(root.createdBy).toBe('DEVELOPER'); - + // Request attributes expect(root.request).toBeDefined(); expect(root.request?.number).toBe('DEVK900001'); @@ -103,22 +106,28 @@ class TmFullScenario extends Scenario { expect(root.request?.status).toBe('D'); expect(root.request?.type).toBe('K'); expect(root.request?.target).toBe('PRD'); - expect(root.request?.uri).toBe('/sap/bc/adt/cts/transportrequests/DEVK900001'); - + expect(root.request?.uri).toBe( + '/sap/bc/adt/cts/transportrequests/DEVK900001', + ); + // Long description expect(root.request?.long_desc).toContain('longer description'); - + // Multiple tasks (array handling) expect(root.request?.task).toHaveLength(2); - + // Task 1: Modifiable, 2 objects expect(root.request?.task?.[0].number).toBe('DEVK900002'); expect(root.request?.task?.[0].owner).toBe('DEVELOPER'); expect(root.request?.task?.[0].status).toBe('D'); expect(root.request?.task?.[0].abap_object).toHaveLength(2); - expect(root.request?.task?.[0].abap_object?.[0].name).toBe('ZCL_TEST_CLASS'); - expect(root.request?.task?.[0].abap_object?.[1].name).toBe('ZTEST_FUNCTION_GROUP'); - + expect(root.request?.task?.[0].abap_object?.[0].name).toBe( + 'ZCL_TEST_CLASS', + ); + expect(root.request?.task?.[0].abap_object?.[1].name).toBe( + 'ZTEST_FUNCTION_GROUP', + ); + // Task 2: Released, 1 object, different owner expect(root.request?.task?.[1].number).toBe('DEVK900003'); expect(root.request?.task?.[1].owner).toBe('DEVELOPER2'); @@ -130,18 +139,18 @@ class TmFullScenario extends Scenario { override validateBuilt(xml: string): void { // Root element with namespace expect(xml).toContain('xmlns:tm="http://www.sap.com/cts/adt/tm"'); - + // Attributes are output without namespace prefix (standard XML behavior) expect(xml).toContain('object_type="K"'); expect(xml).toContain('type="RQRQ"'); expect(xml).toContain('name="DEVK900001"'); expect(xml).toContain('changedBy="DEVELOPER"'); - + // Request attributes (also without prefix) expect(xml).toContain('number="DEVK900001"'); expect(xml).toContain('owner="DEVELOPER"'); expect(xml).toContain('status="D"'); - + // Nested elements (elements have prefix) expect(xml).toContain(' { // Run all transport management scenarios runScenario(new TmTaskScenario()); runScenario(new TmCreateScenario()); -runScenario(new TmFullScenario()); \ No newline at end of file +runScenario(new TmFullScenario()); diff --git a/packages/adt-schemas/ts-xsd.config.ts b/packages/adt-schemas/ts-xsd.config.ts index d81dda62..5f84fd13 100644 --- a/packages/adt-schemas/ts-xsd.config.ts +++ b/packages/adt-schemas/ts-xsd.config.ts @@ -20,11 +20,7 @@ * npx nx run adt-schemas:codegen */ -import { - defineConfig, - rawSchema, - interfaces, -} from 'ts-xsd/generators'; +import { defineConfig, rawSchema, interfaces } from 'ts-xsd/generators'; import { deriveRootTypeName } from 'ts-xsd'; // Target schemas - exported with typed wrappers @@ -121,7 +117,7 @@ export default defineConfig({ '', ...sapSchemas.map( (s: string) => - `export { default as ${s.replace(/-/g, '')} } from './${s}';` + `export { default as ${s.replace(/-/g, '')} } from './${s}';`, ), '', ].join('\n'); @@ -135,7 +131,7 @@ export default defineConfig({ '', ...customSchemas.map( (s: string) => - `export { default as ${s.replace(/-/g, '')} } from './${s}';` + `export { default as ${s.replace(/-/g, '')} } from './${s}';`, ), '', ].join('\n'); @@ -247,13 +243,13 @@ export default defineConfig({ const rootTypeName = toRootTypeName(schemaName); sapTypeImportLines.push( - `import type { ${rootTypeName} } from './types/sap/${schemaName}.types';` + `import type { ${rootTypeName} } from './types/sap/${schemaName}.types';`, ); typedLines.push( - `import ${importName} from './schemas/sap/${schemaName}';` + `import ${importName} from './schemas/sap/${schemaName}';`, ); typedLines.push( - `export const ${exportName}: TypedSchema<${rootTypeName}> = typedSchema<${rootTypeName}>(${importName});` + `export const ${exportName}: TypedSchema<${rootTypeName}> = typedSchema<${rootTypeName}>(${importName});`, ); } @@ -267,13 +263,13 @@ export default defineConfig({ const rootTypeName = toRootTypeName(schemaName); customTypeImportLines.push( - `import type { ${rootTypeName} } from './types/custom/${schemaName}.types';` + `import type { ${rootTypeName} } from './types/custom/${schemaName}.types';`, ); typedLines.push( - `import ${importName} from './schemas/custom/${schemaName}';` + `import ${importName} from './schemas/custom/${schemaName}';`, ); typedLines.push( - `export const ${exportName}: TypedSchema<${rootTypeName}> = typedSchema<${rootTypeName}>(${importName});` + `export const ${exportName}: TypedSchema<${rootTypeName}> = typedSchema<${rootTypeName}>(${importName});`, ); } diff --git a/packages/adt-tui/src/App.tsx b/packages/adt-tui/src/App.tsx index a25072bf..cbe4850a 100644 --- a/packages/adt-tui/src/App.tsx +++ b/packages/adt-tui/src/App.tsx @@ -23,7 +23,12 @@ export interface AppProps { /** * Main TUI Application */ -export function App({ startUrl, fetch, router, systemName }: AppProps) { +export function App({ + startUrl, + fetch, + router, + systemName, +}: AppProps): React.ReactNode { const [, setResizeKey] = useState(0); // Handle terminal resize - just trigger re-render, don't clear @@ -38,5 +43,7 @@ export function App({ startUrl, fetch, router, systemName }: AppProps) { }; }, []); - return ; + return ( + + ); } diff --git a/packages/adt-tui/src/Navigator.tsx b/packages/adt-tui/src/Navigator.tsx index 6b4dc396..155dbe6b 100644 --- a/packages/adt-tui/src/Navigator.tsx +++ b/packages/adt-tui/src/Navigator.tsx @@ -130,7 +130,11 @@ function NavigatorInner({ systemName }: { systemName?: string }) { /** * Main Navigator component */ -export function Navigator({ startUrl, fetch, systemName }: NavigatorProps) { +export function Navigator({ + startUrl, + fetch, + systemName, +}: NavigatorProps): React.ReactNode { return ( void }) { - Example: /sap/bc/adt/cts/transportrequests/S0DK900001 + + Example: /sap/bc/adt/cts/transportrequests/S0DK900001 + ); diff --git a/packages/adt-tui/src/lib/PageRenderer.tsx b/packages/adt-tui/src/lib/PageRenderer.tsx index 4237c9df..7ca0f326 100644 --- a/packages/adt-tui/src/lib/PageRenderer.tsx +++ b/packages/adt-tui/src/lib/PageRenderer.tsx @@ -38,7 +38,8 @@ function MenuItemRow({ {item.label} {item.status && ( - {' '}[{item.status.text}] + {' '} + [{item.status.text}] )} {item.info && {item.info}} @@ -54,7 +55,7 @@ export function PageRenderer({ onNavigate, onBack, onAction, -}: PageRendererProps) { +}: PageRendererProps): React.ReactNode { const [selectedIndex, setSelectedIndex] = useState(0); // Handle keyboard input diff --git a/packages/adt-tui/src/lib/context.tsx b/packages/adt-tui/src/lib/context.tsx index f90440dc..3094d3a7 100644 --- a/packages/adt-tui/src/lib/context.tsx +++ b/packages/adt-tui/src/lib/context.tsx @@ -4,7 +4,13 @@ * React context for sharing navigation state across components. */ -import React, { createContext, useContext, useState, useCallback, type ReactNode } from 'react'; +import React, { + createContext, + useContext, + useState, + useCallback, + type ReactNode, +} from 'react'; import type { NavigationEntry, ParsedResponse, FetchFn } from './types'; interface NavigationContextValue { @@ -41,7 +47,7 @@ export function NavigationProvider({ fetch, parseResponse, initialUrl, -}: NavigationProviderProps) { +}: NavigationProviderProps): React.ReactNode { const [current, setCurrent] = useState(null); const [history, setHistory] = useState([]); const [loading, setLoading] = useState(false); @@ -77,7 +83,7 @@ export function NavigationProvider({ setLoading(false); } }, - [current, fetch, parseResponse] + [current, fetch, parseResponse], ); const back = useCallback(() => { diff --git a/packages/adt-tui/src/lib/types.ts b/packages/adt-tui/src/lib/types.ts index 21e7968b..75a1a3cf 100644 --- a/packages/adt-tui/src/lib/types.ts +++ b/packages/adt-tui/src/lib/types.ts @@ -39,7 +39,11 @@ export interface NavigationEntry { */ export type FetchFn = ( url: string, - options?: { method?: string; headers?: Record; body?: string } + options?: { + method?: string; + headers?: Record; + body?: string; + }, ) => Promise; /** diff --git a/packages/adt-tui/src/pages/GenericPage.tsx b/packages/adt-tui/src/pages/GenericPage.tsx index a70375ff..167b62e3 100644 --- a/packages/adt-tui/src/pages/GenericPage.tsx +++ b/packages/adt-tui/src/pages/GenericPage.tsx @@ -29,7 +29,7 @@ export function genericPage({ url, response }: PageProps): PageResult { for (const link of response.links) { const title = link.title || getActionName(link.rel); - + // Make path relative/shorter for display let displayPath = link.href; const currentBase = url.split('/').slice(0, -1).join('/'); @@ -99,14 +99,32 @@ function extractSummary(data: Record): SummaryItem[] { if (key.includes('link') || key === '?xml') continue; // Extract interesting attributes (those starting with @_) - if (key.startsWith('@_') && typeof value === 'string' || typeof value === 'number') { + if ( + (key.startsWith('@_') && typeof value === 'string') || + typeof value === 'number' + ) { const cleanKey = key.replace('@_', '').replace(/^\w+:/, ''); // Skip duplicates and uninteresting fields - if (seen.has(cleanKey) || cleanKey === 'version' || cleanKey === 'encoding') continue; + if ( + seen.has(cleanKey) || + cleanKey === 'version' || + cleanKey === 'encoding' + ) + continue; seen.add(cleanKey); // Limit to important fields - const important = ['number', 'owner', 'desc', 'status', 'status_text', 'type', 'target', 'name', 'uri']; + const important = [ + 'number', + 'owner', + 'desc', + 'status', + 'status_text', + 'type', + 'target', + 'name', + 'uri', + ]; if (important.some((f) => cleanKey.includes(f))) { summary.push({ key: cleanKey, value: String(value) }); } diff --git a/packages/adt-tui/src/pages/sap/bc/adt/cts/transportrequests/[slug].loader.ts b/packages/adt-tui/src/pages/sap/bc/adt/cts/transportrequests/[slug].loader.ts index 83040bf0..b4130d03 100644 --- a/packages/adt-tui/src/pages/sap/bc/adt/cts/transportrequests/[slug].loader.ts +++ b/packages/adt-tui/src/pages/sap/bc/adt/cts/transportrequests/[slug].loader.ts @@ -4,7 +4,10 @@ * Uses adt-contracts for type-safe XML parsing. */ -import { transportmanagmentSingle, type TransportResponse } from '@abapify/adt-contracts'; +import { + transportmanagmentSingle, + type TransportResponse, +} from '@abapify/adt-contracts'; // Re-export the schema for type inference export { transportmanagmentSingle as schema }; @@ -12,8 +15,10 @@ export { transportmanagmentSingle as schema }; // Use type from contracts package type TransportRoot = TransportResponse; -// Extract nested types -export type Request = NonNullable; +// Extract nested types - TransportResponse has root.request structure +export type Request = NonNullable< + NonNullable['request'] +>; export type Task = NonNullable[number]; export type AbapObject = NonNullable[number]; @@ -79,8 +84,8 @@ export function load(xml: string): TransportData { * Transform parsed XSD data to TransportData */ function transformToTransportData(data: TransportRoot): TransportData { - const request = data.request; - + const request = data.root?.request; + if (!request) { throw new Error('No request element found in transport data'); } @@ -91,7 +96,9 @@ function transformToTransportData(data: TransportRoot): TransportData { // Extract tasks const tasks: TaskInfo[] = []; if (request.task && !isTask) { - const taskArray = Array.isArray(request.task) ? request.task : [request.task]; + const taskArray = Array.isArray(request.task) + ? request.task + : [request.task]; for (const task of taskArray) { tasks.push({ number: task.number ?? '', @@ -108,10 +115,14 @@ function transformToTransportData(data: TransportRoot): TransportData { const objects: ObjectInfo[] = []; if (request.task && isTask) { // When viewing a task, the task element contains objects - const taskArray = Array.isArray(request.task) ? request.task : [request.task]; + const taskArray = Array.isArray(request.task) + ? request.task + : [request.task]; for (const task of taskArray) { if (task.abap_object) { - const objArray = Array.isArray(task.abap_object) ? task.abap_object : [task.abap_object]; + const objArray = Array.isArray(task.abap_object) + ? task.abap_object + : [task.abap_object]; for (const obj of objArray) { objects.push({ pgmid: obj.pgmid ?? '', diff --git a/packages/asjson-parser/tsconfig.spec.json b/packages/asjson-parser/tsconfig.spec.json index 3c002c21..d441ccf0 100644 --- a/packages/asjson-parser/tsconfig.spec.json +++ b/packages/asjson-parser/tsconfig.spec.json @@ -13,14 +13,10 @@ "include": [ "vite.config.ts", "vitest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.test.tsx", - "src/**/*.spec.tsx", - "src/**/*.test.js", - "src/**/*.spec.js", - "src/**/*.test.jsx", - "src/**/*.spec.jsx", + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.js", + "src/**/*.jsx", "src/**/*.d.ts" ] } diff --git a/packages/browser-auth/src/auth-core.ts b/packages/browser-auth/src/auth-core.ts index 15d46cd3..a8aaa1ed 100644 --- a/packages/browser-auth/src/auth-core.ts +++ b/packages/browser-auth/src/auth-core.ts @@ -1,12 +1,20 @@ /** * Browser Auth Core - * + * * Event-driven authentication logic shared by Playwright and Puppeteer adapters. * This module contains NO browser-specific code. */ -import type { BrowserAdapter, BrowserAuthOptions, BrowserCredentials } from './types'; -import { matchesCookiePattern, cookieMatchesAny, resolveUserDataDir } from './utils'; +import type { + BrowserAdapter, + BrowserAuthOptions, + BrowserCredentials, +} from './types'; +import { + matchesCookiePattern, + cookieMatchesAny, + resolveUserDataDir, +} from './utils'; const DEFAULT_TIMEOUT = 300_000; // 5 minutes const SYSTEM_INFO_PATH = '/sap/bc/adt/core/http/systeminformation'; @@ -18,13 +26,13 @@ export interface AuthenticateOptions extends BrowserAuthOptions { /** * Authenticate using browser-based SSO - * + * * This is the main entry point - it orchestrates the auth flow using the provided adapter. * The adapter handles browser-specific operations, this function handles the logic. */ export async function authenticate( adapter: BrowserAdapter, - options: AuthenticateOptions + options: AuthenticateOptions, ): Promise { const { url, @@ -65,13 +73,16 @@ export async function authenticate( // Step 3: Wait for authentication (200 response from target URL AND required cookies) log('🌐 Complete SSO login if prompted...'); - const cookiesToWait = requiredCookies && requiredCookies.length > 0 - ? requiredCookies - : ['SAP_SESSIONID_*']; // Default: wait for session cookie + const cookiesToWait = + requiredCookies && requiredCookies.length > 0 + ? requiredCookies + : ['SAP_SESSIONID_*']; // Default: wait for session cookie log(`⏳ Waiting for cookies: ${cookiesToWait.join(', ')}`); - const sapCookies = await new Promise>>((resolve, reject) => { + const sapCookies = await new Promise< + Awaited> + >((resolve, reject) => { const timeoutId = setTimeout(() => { reject(new Error('Authentication timeout - SSO not completed')); }, timeout); @@ -82,23 +93,29 @@ export async function authenticate( }); // Check for both 200 response AND required cookies on every response - adapter.onResponse(async event => { + adapter.onResponse(async (event) => { // Only check on 200 responses from the target URL if (event.url === targetUrl && event.status === 200) { // Got 200 from target URL - now check if cookies are set const allCookies = await adapter.getCookies(); - const domainCookies = allCookies.filter(c => - c.domain.includes(sapHost) || sapHost.includes(c.domain.replace(/^\./, '')) + const domainCookies = allCookies.filter( + (c) => + c.domain.includes(sapHost) || + sapHost.includes(c.domain.replace(/^\./, '')), ); - const matchedCookies = domainCookies.filter(c => cookieMatchesAny(c.name, cookiesToWait)); - const allFound = cookiesToWait.every(pattern => - matchedCookies.some(c => matchesCookiePattern(c.name, pattern)) + const matchedCookies = domainCookies.filter((c) => + cookieMatchesAny(c.name, cookiesToWait), + ); + const allFound = cookiesToWait.every((pattern) => + matchedCookies.some((c) => matchesCookiePattern(c.name, pattern)), ); if (allFound) { clearTimeout(timeoutId); log('✅ Authentication complete!'); - log(`🍪 Found required cookies: ${matchedCookies.map(c => c.name).join(', ')}`); + log( + `🍪 Found required cookies: ${matchedCookies.map((c) => c.name).join(', ')}`, + ); resolve(matchedCookies); } // If cookies not found yet, keep waiting for more responses @@ -114,22 +131,27 @@ export async function authenticate( // Validate cookies if (requiredCookies && requiredCookies.length > 0) { const missingPatterns = requiredCookies.filter( - pattern => !sapCookies.some(c => matchesCookiePattern(c.name, pattern)) + (pattern) => + !sapCookies.some((c) => matchesCookiePattern(c.name, pattern)), ); if (missingPatterns.length > 0) { - throw new Error(`Missing required cookies: ${missingPatterns.join(', ')}`); + throw new Error( + `Missing required cookies: ${missingPatterns.join(', ')}`, + ); } } if (sapCookies.length === 0) { - throw new Error('No SAP cookies captured - authentication may have failed'); + throw new Error( + 'No SAP cookies captured - authentication may have failed', + ); } - const cookieNames = sapCookies.map(c => c.name).join(', '); + const cookieNames = sapCookies.map((c) => c.name).join(', '); log(`🍪 Captured ${sapCookies.length} cookies: ${cookieNames}`); // Get user agent - const userAgentString = userAgent || await adapter.getUserAgent(); + const userAgentString = userAgent || (await adapter.getUserAgent()); return { baseUrl: url, @@ -147,22 +169,24 @@ export async function authenticate( */ export async function testCredentials( credentials: BrowserCredentials, - options?: { timeout?: number } + options?: { timeout?: number }, ): Promise<{ valid: boolean; error?: string; responseTime?: number }> { const startTime = Date.now(); const testUrl = new URL(SYSTEM_INFO_PATH, credentials.baseUrl); try { const cookieHeader = credentials.cookies - .map(c => `${c.name}=${c.value}`) + .map((c) => `${c.name}=${c.value}`) .join('; '); const response = await fetch(testUrl.toString(), { headers: { - 'Cookie': cookieHeader, - 'Accept': 'application/xml', + Cookie: cookieHeader, + Accept: 'application/xml', }, - signal: options?.timeout ? AbortSignal.timeout(options.timeout) : undefined, + signal: options?.timeout + ? AbortSignal.timeout(options.timeout) + : undefined, }); const text = await response.text(); @@ -194,15 +218,15 @@ export async function testCredentials( * Convert credentials to HTTP cookie header */ export function toCookieHeader(credentials: BrowserCredentials): string { - return credentials.cookies - .map(c => `${c.name}=${c.value}`) - .join('; '); + return credentials.cookies.map((c) => `${c.name}=${c.value}`).join('; '); } /** * Convert credentials to HTTP headers object */ -export function toHeaders(credentials: BrowserCredentials): Record { +export function toHeaders( + credentials: BrowserCredentials, +): Record { return { Cookie: toCookieHeader(credentials), ...(credentials.userAgent ? { 'User-Agent': credentials.userAgent } : {}), diff --git a/packages/browser-auth/src/types.ts b/packages/browser-auth/src/types.ts index 3ceee999..98cd2bf1 100644 --- a/packages/browser-auth/src/types.ts +++ b/packages/browser-auth/src/types.ts @@ -1,6 +1,6 @@ /** * Browser Auth Core Types - * + * * Shared types for browser-based SSO authentication. * Used by both Playwright and Puppeteer adapters. */ diff --git a/packages/ts-xsd/src/codegen/runner.ts b/packages/ts-xsd/src/codegen/runner.ts index e56b52d1..0eb7b2fd 100644 --- a/packages/ts-xsd/src/codegen/runner.ts +++ b/packages/ts-xsd/src/codegen/runner.ts @@ -1,10 +1,16 @@ /** * Config Runner - * + * * Executes the generator pipeline based on configuration. */ -import { readFileSync, writeFileSync, mkdirSync, existsSync, rmSync } from 'node:fs'; +import { + readFileSync, + writeFileSync, + mkdirSync, + existsSync, + rmSync, +} from 'node:fs'; import { join, dirname, relative, isAbsolute, basename } from 'node:path'; import { parseXsd } from '../xsd'; import { linkSchema } from '../xsd/loader'; @@ -45,7 +51,7 @@ export interface RunnerResult { */ export async function runCodegen( config: CodegenConfig, - options: RunnerOptions + options: RunnerOptions, ): Promise { const { rootDir, dryRun = false, verbose = false } = options; const result: RunnerResult = { files: [], schemas: [], errors: [] }; @@ -56,18 +62,22 @@ export async function runCodegen( // Build source info map - expand schemas if autoLink is enabled const sources: Record = {}; for (const [name, sourceConfig] of Object.entries(config.sources)) { - const xsdDir = isAbsolute(sourceConfig.xsdDir) ? sourceConfig.xsdDir : join(rootDir, sourceConfig.xsdDir); - + const xsdDir = isAbsolute(sourceConfig.xsdDir) + ? sourceConfig.xsdDir + : join(rootDir, sourceConfig.xsdDir); + // If autoLink is enabled, discover all dependent schemas let schemas = sourceConfig.schemas; if (sourceConfig.autoLink) { schemas = discoverDependentSchemas(sourceConfig.schemas, xsdDir, log); } - + sources[name] = { name, xsdDir, - outputDir: isAbsolute(sourceConfig.outputDir) ? sourceConfig.outputDir : join(rootDir, sourceConfig.outputDir), + outputDir: isAbsolute(sourceConfig.outputDir) + ? sourceConfig.outputDir + : join(rootDir, sourceConfig.outputDir), schemas, }; } @@ -108,7 +118,7 @@ export async function runCodegen( /** * Recursively discover and parse schemas referenced via xs:include or xs:redefine. * This ensures schemas like types/devc.xsd are in globalAllSchemas when devc.xsd references them. - * + * * @param schema - The parsed schema object * @param xsdDir - The root XSD directory (e.g., '.xsd') * @param currentXsdPath - The path of the current XSD file (for resolving relative paths) @@ -120,40 +130,49 @@ export async function runCodegen( xsdDir: string, currentXsdPath: string, sourceName: string, - discovered: Set = new Set() + discovered: Set = new Set(), ): void { // Get includes and redefines from schema - const includes = schema.include as Array<{ schemaLocation?: string }> | undefined; - const redefines = schema.redefine as Array<{ schemaLocation?: string }> | undefined; + const includes = schema.include as + | Array<{ schemaLocation?: string }> + | undefined; + const redefines = schema.redefine as + | Array<{ schemaLocation?: string }> + | undefined; const refs = [...(includes ?? []), ...(redefines ?? [])]; - + for (const ref of refs) { if (!ref.schemaLocation) continue; - + // Get schema name with path (e.g., "types/devc" from "types/devc.xsd") const schemaNameWithPath = ref.schemaLocation.replace(/\.xsd$/, ''); - + // Skip if already discovered or already in global map - if (discovered.has(schemaNameWithPath) || globalAllSchemas.has(schemaNameWithPath)) { + if ( + discovered.has(schemaNameWithPath) || + globalAllSchemas.has(schemaNameWithPath) + ) { continue; } discovered.add(schemaNameWithPath); - + // Resolve the referenced schema path relative to the current XSD file's directory const currentXsdDir = dirname(currentXsdPath); const refXsdPath = join(currentXsdDir, ref.schemaLocation); if (!existsSync(refXsdPath)) { - log(` ⚠️ Referenced schema not found: ${ref.schemaLocation} (resolved from ${currentXsdDir})`); + log( + ` ⚠️ Referenced schema not found: ${ref.schemaLocation} (resolved from ${currentXsdDir})`, + ); continue; } - + try { const refXsdContent = readFileSync(refXsdPath, 'utf-8'); const refSchema = parseXsd(refXsdContent); - + // Set $filename with path for proper identification (refSchema as { $filename?: string }).$filename = ref.schemaLocation; - + const refSchemaInfo: SchemaInfo = { name: schemaNameWithPath, xsdContent: refXsdContent, @@ -161,16 +180,24 @@ export async function runCodegen( sourceName, xsdPath: refXsdPath, }; - + // Add to global map with path-qualified name globalAllSchemas.set(schemaNameWithPath, refSchemaInfo); log(` 📎 Auto-discovered: ${schemaNameWithPath}`); - + // Recursively discover schemas referenced by this one - discoverReferencedSchemas(refSchema as Record, xsdDir, refXsdPath, sourceName, discovered); + discoverReferencedSchemas( + refSchema as Record, + xsdDir, + refXsdPath, + sourceName, + discovered, + ); } catch (error) { const err = error instanceof Error ? error : new Error(String(error)); - log(` ⚠️ Failed to parse referenced schema ${ref.schemaLocation}: ${err.message}`); + log( + ` ⚠️ Failed to parse referenced schema ${ref.schemaLocation}: ${err.message}`, + ); } } } @@ -181,7 +208,7 @@ export async function runCodegen( for (const schemaName of source.schemas) { const xsdPath = join(source.xsdDir, `${schemaName}.xsd`); - + if (!existsSync(xsdPath)) { log(` ⚠️ Skipping ${schemaName} - XSD not found`); continue; @@ -190,15 +217,15 @@ export async function runCodegen( try { const xsdContent = readFileSync(xsdPath, 'utf-8'); const schema = parseXsd(xsdContent); - + // Set $filename for schema identification (used by linkSchemas and interface generator) (schema as { $filename?: string }).$filename = `${schemaName}.xsd`; - + // Link schema - populates $imports/$includes from schemaLocation references // This is done once here so generators receive pre-linked schemas const basePath = dirname(xsdPath); linkSchema(schema, { basePath, throwOnMissing: false }); - + const schemaInfo: SchemaInfo = { name: schemaName, xsdContent, @@ -206,18 +233,27 @@ export async function runCodegen( sourceName, xsdPath, }; - + schemaInfos.push(schemaInfo); // Add to global map with unique key (sourceName/schemaName to avoid collisions) globalAllSchemas.set(schemaName, schemaInfo); result.schemas.push({ name: schemaName, source: sourceName }); - + // Auto-discover schemas referenced via xs:include or xs:redefine - discoverReferencedSchemas(schema as Record, source.xsdDir, xsdPath, sourceName); + discoverReferencedSchemas( + schema as Record, + source.xsdDir, + xsdPath, + sourceName, + ); } catch (error) { const err = error instanceof Error ? error : new Error(String(error)); log(` ❌ Failed to parse ${schemaName}: ${err.message}`); - result.errors.push({ schema: schemaName, source: sourceName, error: err }); + result.errors.push({ + schema: schemaName, + source: sourceName, + error: err, + }); } } @@ -227,7 +263,7 @@ export async function runCodegen( // Second pass: run transforms with global schema map for (const [sourceName, source] of Object.entries(sources)) { const schemaInfos = processedSchemas.get(sourceName) ?? []; - + for (const schemaInfo of schemaInfos) { const transformCtx: TransformContext = { schema: schemaInfo, @@ -235,7 +271,12 @@ export async function runCodegen( allSchemas: globalAllSchemas, // Use global map for cross-source resolution allSources: sources, rootDir, - resolveImport: createImportResolver(schemaInfo, source, sources, config), + resolveImport: createImportResolver( + schemaInfo, + source, + sources, + config, + ), }; for (const generator of config.generators) { @@ -244,19 +285,26 @@ export async function runCodegen( const files = await generator.transform(transformCtx); for (const file of files) { const fullPath = join(source.outputDir, file.path); - + if (!dryRun) { mkdirSync(dirname(fullPath), { recursive: true }); writeFileSync(fullPath, file.content); } - + result.files.push({ path: fullPath, source: sourceName }); log(` ✅ [${generator.name}] Generated ${file.path}`); } } catch (error) { - const err = error instanceof Error ? error : new Error(String(error)); - log(` ❌ [${generator.name}] Failed ${schemaInfo.name}: ${err.message}`); - result.errors.push({ schema: schemaInfo.name, source: sourceName, error: err }); + const err = + error instanceof Error ? error : new Error(String(error)); + log( + ` ❌ [${generator.name}] Failed ${schemaInfo.name}: ${err.message}`, + ); + result.errors.push({ + schema: schemaInfo.name, + source: sourceName, + error: err, + }); } } } @@ -275,19 +323,21 @@ export async function runCodegen( try { log(`\n[${generator.name}] Running finalize...`); const files = await generator.finalize(finalizeCtx); - + for (const file of files) { // Finalize files go to each source's output dir for (const [sourceName, source] of Object.entries(sources)) { const fullPath = join(source.outputDir, file.path); - + if (!dryRun) { mkdirSync(dirname(fullPath), { recursive: true }); writeFileSync(fullPath, file.content); } - + result.files.push({ path: fullPath, source: sourceName }); - log(` ✅ [${generator.name}] Generated ${file.path} for ${sourceName}`); + log( + ` ✅ [${generator.name}] Generated ${file.path} for ${sourceName}`, + ); } } } catch (error) { @@ -305,19 +355,19 @@ export async function runCodegen( sources, rootDir, processedSchemas, - generatedFiles: result.files.map(f => ({ path: f.path, content: '' })), // Content not tracked + generatedFiles: result.files.map((f) => ({ path: f.path, content: '' })), // Content not tracked }; - + const extraFiles = await config.afterAll(afterAllCtx); if (extraFiles && Array.isArray(extraFiles)) { for (const file of extraFiles) { const fullPath = join(rootDir, file.path); - + if (!dryRun) { mkdirSync(dirname(fullPath), { recursive: true }); writeFileSync(fullPath, file.content); } - + result.files.push({ path: fullPath, source: 'afterAll' }); log(` ✅ [afterAll] Generated ${file.path}`); } @@ -335,45 +385,53 @@ function createImportResolver( currentSchema: SchemaInfo, currentSource: SourceInfo, allSources: Record, - config: CodegenConfig + config: CodegenConfig, ): (schemaLocation: string) => string | null { - const ext = config.importExtension ?? ''; // Default to extensionless for bundler compatibility - + const ext = config.importExtension ?? ''; // Default to extensionless for bundler compatibility + return (schemaLocation: string) => { // Remove .xsd extension but preserve path (e.g., "types/dd01v.xsd" -> "types/dd01v") const schemaPath = schemaLocation.replace(/\.xsd$/, ''); // Also try just the base name for backward compatibility const schemaBaseName = schemaPath.replace(/^.*\//, ''); - + // Get the directory of the current schema (for resolving relative paths) // e.g., "sap/classes" -> "sap", "custom/discovery" -> "custom" const currentSchemaDir = dirname(currentSchema.name); - + // Resolve the schemaLocation relative to the current schema's directory // e.g., if current is "sap/classes" and schemaLocation is "adtcore.xsd" -> "sap/adtcore" // e.g., if current is "custom/discovery" and schemaLocation is "../sap/atom.xsd" -> "sap/atom" - const resolvedPath = currentSchemaDir !== '.' - ? join(currentSchemaDir, schemaPath).replace(/\\/g, '/') - : schemaPath; - + const resolvedPath = + currentSchemaDir !== '.' + ? join(currentSchemaDir, schemaPath).replace(/\\/g, '/') + : schemaPath; + // Normalize the path (handle ../ etc.) - const normalizedPath = resolvedPath.split('/').reduce((acc: string[], part) => { - if (part === '..') acc.pop(); - else if (part !== '.') acc.push(part); - return acc; - }, []).join('/'); - + const normalizedPath = resolvedPath + .split('/') + .reduce((acc: string[], part) => { + if (part === '..') acc.pop(); + else if (part !== '.') acc.push(part); + return acc; + }, []) + .join('/'); + // Check if the resolved path is in the current source if (currentSource.schemas.includes(normalizedPath)) { // Calculate relative import path from current schema to target const fromDir = dirname(currentSchema.name); const toPath = normalizedPath; - const relImport = fromDir === dirname(toPath) - ? `./${basename(toPath)}${ext}` - : relative(fromDir || '.', toPath).replace(/\\/g, '/') || `./${basename(toPath)}`; - return relImport.startsWith('.') ? `${relImport}${ext}` : `./${relImport}${ext}`; + const relImport = + fromDir === dirname(toPath) + ? `./${basename(toPath)}${ext}` + : relative(fromDir || '.', toPath).replace(/\\/g, '/') || + `./${basename(toPath)}`; + return relImport.startsWith('.') + ? `${relImport}${ext}` + : `./${relImport}${ext}`; } - + // Try the original schemaPath (for backward compatibility with flat structures) if (currentSource.schemas.includes(schemaPath)) { return `./${schemaPath}${ext}`; @@ -381,11 +439,11 @@ function createImportResolver( if (currentSource.schemas.includes(schemaBaseName)) { return `./${schemaBaseName}${ext}`; } - + // Check other sources for (const [sourceName, source] of Object.entries(allSources)) { if (sourceName === currentSource.name) continue; - + if (source.schemas.includes(normalizedPath)) { const relPath = relative(currentSource.outputDir, source.outputDir); return `${relPath}/${normalizedPath}${ext}`.replace(/\\/g, '/'); @@ -399,7 +457,7 @@ function createImportResolver( return `${relPath}/${schemaBaseName}${ext}`.replace(/\\/g, '/'); } } - + return null; }; } @@ -415,33 +473,35 @@ function createImportResolver( function discoverDependentSchemas( entrySchemas: string[], xsdDir: string, - log: (...args: unknown[]) => void + log: (...args: unknown[]) => void, ): string[] { const discovered = new Set(); const queue = [...entrySchemas]; - + while (queue.length > 0) { const schemaName = queue.shift(); if (!schemaName) continue; - + // Skip if already processed if (discovered.has(schemaName)) continue; - + // Try to find and parse the XSD file const xsdPath = join(xsdDir, `${schemaName}.xsd`); if (!existsSync(xsdPath)) { - throw new Error(`Schema not found: ${schemaName}.xsd (resolved: ${xsdPath})`); + throw new Error( + `Schema not found: ${schemaName}.xsd (resolved: ${xsdPath})`, + ); } - + discovered.add(schemaName); - + try { const xsdContent = readFileSync(xsdPath, 'utf-8'); const schema = parseXsd(xsdContent); - + // Extract schemaLocation from import, include, redefine const deps = extractSchemaLocations(schema, xsdDir, schemaName); - + for (const dep of deps) { if (!discovered.has(dep)) { queue.push(dep); @@ -452,7 +512,7 @@ function discoverDependentSchemas( log(` ❌ Failed to parse ${schemaName} for dependency discovery`); } } - + return Array.from(discovered); } @@ -462,13 +522,15 @@ function discoverDependentSchemas( function extractSchemaLocations( schema: Record, xsdDir: string, - currentSchema: string + currentSchema: string, ): string[] { const locations: string[] = []; const currentDir = dirname(join(xsdDir, `${currentSchema}.xsd`)); - + // xs:import - const imports = schema.import as Array<{ schemaLocation?: string }> | undefined; + const imports = schema.import as + | Array<{ schemaLocation?: string }> + | undefined; if (imports) { for (const imp of imports) { if (imp.schemaLocation) { @@ -477,9 +539,11 @@ function extractSchemaLocations( } } } - + // xs:include - const includes = schema.include as Array<{ schemaLocation?: string }> | undefined; + const includes = schema.include as + | Array<{ schemaLocation?: string }> + | undefined; if (includes) { for (const inc of includes) { if (inc.schemaLocation) { @@ -488,9 +552,11 @@ function extractSchemaLocations( } } } - + // xs:redefine - const redefines = schema.redefine as Array<{ schemaLocation?: string }> | undefined; + const redefines = schema.redefine as + | Array<{ schemaLocation?: string }> + | undefined; if (redefines) { for (const red of redefines) { if (red.schemaLocation) { @@ -499,7 +565,7 @@ function extractSchemaLocations( } } } - + return locations; } @@ -509,21 +575,21 @@ function extractSchemaLocations( function resolveSchemaName( schemaLocation: string, currentDir: string, - xsdDir: string + xsdDir: string, ): string | null { // Resolve the full path const fullPath = join(currentDir, schemaLocation); - + // Make it relative to xsdDir const relativePath = relative(xsdDir, fullPath); - + // Remove .xsd extension const name = relativePath.replace(/\.xsd$/, ''); - + // Check if file exists if (existsSync(fullPath)) { return name; } - + return null; } diff --git a/packages/ts-xsd/src/codegen/ts-morph.ts b/packages/ts-xsd/src/codegen/ts-morph.ts index 88b4edee..7bd90449 100644 --- a/packages/ts-xsd/src/codegen/ts-morph.ts +++ b/packages/ts-xsd/src/codegen/ts-morph.ts @@ -32,7 +32,7 @@ import type { */ export type SchemaLocationResolver = ( schemaLocation: string, - basePath?: string + basePath?: string, ) => Schema | undefined; export interface SchemaToSourceFileOptions { @@ -61,7 +61,6 @@ export interface SchemaSourceFileResult { rootTypeName: string | undefined; } - // ============================================================================= // Helpers // ============================================================================= @@ -85,7 +84,7 @@ function deriveRootTypeName(filename: string | undefined): string | undefined { */ export function schemaToSourceFile( schema: Schema, - options: SchemaToSourceFileOptions = {} + options: SchemaToSourceFileOptions = {}, ): SchemaSourceFileResult { const project = options.project ?? new Project({ useInMemoryFileSystem: true }); @@ -118,7 +117,7 @@ export function schemaToSourceFile( if (imp.schemaLocation) { const resolvedSchema = options.schemaLocationResolver( imp.schemaLocation, - options.basePath + options.basePath, ); if (resolvedSchema) { trackImportedTypes(resolvedSchema, ctx); @@ -196,7 +195,7 @@ export interface FlattenTypeOptions { export function flattenType( sourceFile: SourceFile, typeName: string, - options: FlattenTypeOptions = {} + options: FlattenTypeOptions = {}, ): SourceFile { const project = sourceFile.getProject(); @@ -209,7 +208,7 @@ export function flattenType( project.createSourceFile( additionalFile.getFilePath(), additionalFile.getFullText(), - { overwrite: true } + { overwrite: true }, ); } } @@ -245,7 +244,6 @@ export function flattenType( return flatFile; } - // ============================================================================= // Type Expansion (for flattenType) // ============================================================================= @@ -279,7 +277,7 @@ export function expandTypeToString( checker: TypeChecker, context: Node, indent = '', - visited = new Set() + visited = new Set(), ): string { if (isPrimitiveType(type)) { return type.getText(); @@ -293,7 +291,7 @@ export function expandTypeToString( checker, context, indent, - visited + visited, )}[]`; } return 'unknown[]'; @@ -358,7 +356,7 @@ export function expandTypeToString( checker, context, indent + ' ', - newVisited + newVisited, ); lines.push(`${indent} ${name}${optional}: ${expanded};`); } @@ -395,7 +393,13 @@ export function expandTypeToString( const ifaceType = iface.getType(); const newVisited = new Set(visited); newVisited.add(typeName); - return expandTypeToString(ifaceType, checker, context, indent, newVisited); + return expandTypeToString( + ifaceType, + checker, + context, + indent, + newVisited, + ); } } } @@ -410,7 +414,7 @@ export function expandTypeToString( checker, context, indent, - newVisited + newVisited, ); } // If still no properties, return unknown to avoid import() in output @@ -420,7 +424,6 @@ export function expandTypeToString( return textRepr; } - // ============================================================================= // Internal Types // ============================================================================= @@ -504,7 +507,7 @@ function toInterfaceName(name: string): string { function trackImportedTypes( importedSchema: Schema, - ctx: GeneratorContext + ctx: GeneratorContext, ): void { const schemaName = importedSchema.$filename?.replace('.xsd', '') ?? 'unknown'; @@ -594,7 +597,7 @@ function resolveTypeName(typeName: string, ctx: GeneratorContext): string { function generateInterface( name: string, ct: TopLevelComplexType | LocalComplexType, - ctx: GeneratorContext + ctx: GeneratorContext, ): void { const interfaceName = toInterfaceName(name); if (ctx.generatedTypes.has(interfaceName)) return; @@ -628,25 +631,31 @@ function generateInterface( // Collect extension's own properties const ext = ct.complexContent.extension; - if (ext.sequence) hasAny = collectFromGroup(ext.sequence, properties, ctx, false) || hasAny; - if (ext.choice) hasAny = collectFromGroup(ext.choice, properties, ctx, true) || hasAny; - if (ext.all) hasAny = collectFromGroup(ext.all, properties, ctx, false) || hasAny; + if (ext.sequence) + hasAny = collectFromGroup(ext.sequence, properties, ctx, false) || hasAny; + if (ext.choice) + hasAny = collectFromGroup(ext.choice, properties, ctx, true) || hasAny; + if (ext.all) + hasAny = collectFromGroup(ext.all, properties, ctx, false) || hasAny; collectAttributes(ext.attribute, properties, ctx); } // Handle simpleContent else if (ct.simpleContent?.extension) { const ext = ct.simpleContent.extension; const baseType = ext.base - ? XSD_BUILT_IN_TYPES[stripNsPrefix(ext.base)] ?? 'string' + ? (XSD_BUILT_IN_TYPES[stripNsPrefix(ext.base)] ?? 'string') : 'string'; - properties.push({ name: '_text', type: baseType, hasQuestionToken: true }); + properties.push({ name: '$value', type: baseType, hasQuestionToken: true }); collectAttributes(ext.attribute, properties, ctx); } // Handle direct content (no complexContent/simpleContent) else { - if (ct.sequence) hasAny = collectFromGroup(ct.sequence, properties, ctx, false) || hasAny; - if (ct.choice) hasAny = collectFromGroup(ct.choice, properties, ctx, true) || hasAny; - if (ct.all) hasAny = collectFromGroup(ct.all, properties, ctx, false) || hasAny; + if (ct.sequence) + hasAny = collectFromGroup(ct.sequence, properties, ctx, false) || hasAny; + if (ct.choice) + hasAny = collectFromGroup(ct.choice, properties, ctx, true) || hasAny; + if (ct.all) + hasAny = collectFromGroup(ct.all, properties, ctx, false) || hasAny; collectAttributes(ct.attribute, properties, ctx); if (ct.mixed) { @@ -663,9 +672,14 @@ function generateInterface( const group = ctx.schema.group?.find((g) => g.name === groupName); if (group) { if (group.sequence) - hasAny = collectFromGroup(group.sequence, properties, ctx, false) || hasAny; - if (group.choice) hasAny = collectFromGroup(group.choice, properties, ctx, true) || hasAny; - if (group.all) hasAny = collectFromGroup(group.all, properties, ctx, false) || hasAny; + hasAny = + collectFromGroup(group.sequence, properties, ctx, false) || hasAny; + if (group.choice) + hasAny = + collectFromGroup(group.choice, properties, ctx, true) || hasAny; + if (group.all) + hasAny = + collectFromGroup(group.all, properties, ctx, false) || hasAny; } } } @@ -706,7 +720,7 @@ function collectFromGroup( group: GroupLike, properties: Array<{ name: string; type: string; hasQuestionToken: boolean }>, ctx: GeneratorContext, - forceOptional: boolean + forceOptional: boolean, ): boolean { let hasAny = false; @@ -728,11 +742,21 @@ function collectFromGroup( const namedGroup = ctx.schema.group?.find((gr) => gr.name === groupName); if (namedGroup) { if (namedGroup.sequence) - if (collectFromGroup(namedGroup.sequence, properties, ctx, forceOptional)) hasAny = true; + if ( + collectFromGroup( + namedGroup.sequence, + properties, + ctx, + forceOptional, + ) + ) + hasAny = true; if (namedGroup.choice) - if (collectFromGroup(namedGroup.choice, properties, ctx, true)) hasAny = true; + if (collectFromGroup(namedGroup.choice, properties, ctx, true)) + hasAny = true; if (namedGroup.all) - if (collectFromGroup(namedGroup.all, properties, ctx, forceOptional)) hasAny = true; + if (collectFromGroup(namedGroup.all, properties, ctx, forceOptional)) + hasAny = true; } } } @@ -749,7 +773,7 @@ function addElementProperty( element: LocalElement, properties: Array<{ name: string; type: string; hasQuestionToken: boolean }>, ctx: GeneratorContext, - forceOptional: boolean + forceOptional: boolean, ): void { // Handle element reference if (element.ref) { @@ -764,7 +788,7 @@ function addElementProperty( }, properties, ctx, - forceOptional + forceOptional, ); } return; @@ -783,7 +807,7 @@ function addElementProperty( tsType = resolveTypeName(element.type, ctx); } else if (element.complexType) { // Inline complex type - generate anonymous interface - tsType = 'unknown'; // TODO: could generate inline type + tsType = 'unknown'; // NOTE: could generate inline type for complex types } else if (element.simpleType?.restriction?.enumeration) { tsType = element.simpleType.restriction.enumeration .map((e: { value?: string }) => `'${e.value}'`) @@ -810,7 +834,7 @@ function addElementProperty( function collectAttributes( attributes: readonly LocalAttribute[] | undefined, properties: Array<{ name: string; type: string; hasQuestionToken: boolean }>, - ctx: GeneratorContext + ctx: GeneratorContext, ): void { if (!attributes) return; @@ -853,7 +877,7 @@ function collectAttributes( function generateSimpleType( name: string, st: TopLevelSimpleType, - ctx: GeneratorContext + ctx: GeneratorContext, ): void { const typeName = toInterfaceName(name); if (ctx.generatedTypes.has(typeName)) return; @@ -883,16 +907,16 @@ function generateSimpleType( function generateRootType(rootTypeName: string, ctx: GeneratorContext): void { const elements = ctx.schema.element ?? []; - + // Filter to non-abstract elements that have a name - const concreteElements = elements.filter(el => el.name && !el.abstract); - + const concreteElements = elements.filter((el) => el.name && !el.abstract); + if (concreteElements.length === 0) return; // Build type for each element const elementTypes: string[] = []; const elementNames: string[] = []; - + for (const el of concreteElements) { let elementType: string; if (el.type) { @@ -900,7 +924,9 @@ function generateRootType(rootTypeName: string, ctx: GeneratorContext): void { } else if (el.complexType) { // For inline complexType, use the generated interface name const interfaceName = toInterfaceName(el.name!); - elementType = ctx.generatedTypes.has(interfaceName) ? interfaceName : 'unknown'; + elementType = ctx.generatedTypes.has(interfaceName) + ? interfaceName + : 'unknown'; } else { elementType = 'string'; } @@ -911,14 +937,16 @@ function generateRootType(rootTypeName: string, ctx: GeneratorContext): void { // For single root: wrap with element name { elementName: Type } // For multi-root: union of wrapped types { el1: Type1 } | { el2: Type2 } // Root type matches what parse() returns - wrapped with element name for type discrimination - const wrappedTypes = elementNames.map((name, i) => `{ ${name}: ${elementTypes[i]} }`); - const rootType = wrappedTypes.length === 1 - ? wrappedTypes[0] - : wrappedTypes.join(' | '); - - const description = elementNames.length === 1 - ? `Root schema type (${elementNames[0]} element)` - : `Root schema type (${elementNames.join(' | ')} elements)`; + const wrappedTypes = elementNames.map( + (name, i) => `{ ${name}: ${elementTypes[i]} }`, + ); + const rootType = + wrappedTypes.length === 1 ? wrappedTypes[0] : wrappedTypes.join(' | '); + + const description = + elementNames.length === 1 + ? `Root schema type (${elementNames[0]} element)` + : `Root schema type (${elementNames.join(' | ')} elements)`; ctx.sourceFile.addTypeAlias({ name: rootTypeName, diff --git a/packages/ts-xsd/src/infer/infer.ts b/packages/ts-xsd/src/infer/infer.ts index e2f09679..4aef9130 100644 --- a/packages/ts-xsd/src/infer/infer.ts +++ b/packages/ts-xsd/src/infer/infer.ts @@ -1,9 +1,9 @@ /** * Type Inference Utilities for W3C XSD Schema - * + * * These types enable inferring TypeScript types directly from W3C-compliant * Schema objects defined with `as const`. - * + * * This file contains ONLY inference utilities (InferSchema, InferElement, etc.) * The schema-like type definitions are in ./schema-like.ts */ @@ -25,10 +25,10 @@ import type { /** * Infer TypeScript type from a W3C Schema. - * + * * For schemas with multiple root elements, returns a union of all possible * document types. Use type guards or discriminated unions to narrow. - * + * * @example * ```typescript * const schema = { @@ -38,12 +38,12 @@ import type { * ], * complexType: [...] * } as const; - * + * * type Data = InferSchema; * // PersonType | CompanyType (union of all root element types) * ``` */ -export type InferSchema = +export type InferSchema = T['element'] extends readonly ElementLike[] ? InferRootElementTypes : unknown; @@ -53,36 +53,38 @@ export type InferSchema = * Each root element's type is inferred and combined into a union. * Use InferParsedSchema for parse() return type which wraps with element name. */ -export type InferRootElementTypes = - E[number] extends infer El - ? El extends ElementLike - ? El extends { type: infer TypeName } - ? TypeName extends string - ? InferTypeName - : El extends { name: infer N } - ? N extends string - ? InferTypeName - : unknown - : unknown +export type InferRootElementTypes< + E extends readonly ElementLike[], + T extends SchemaLike, +> = E[number] extends infer El + ? El extends ElementLike + ? El extends { type: infer TypeName } + ? TypeName extends string + ? InferTypeName : El extends { name: infer N } ? N extends string ? InferTypeName : unknown : unknown - : unknown - : unknown; + : El extends { name: infer N } + ? N extends string + ? InferTypeName + : unknown + : unknown + : unknown + : unknown; /** * Infer wrapped type for parse() function output. * Returns { ElementName: ContentType } to match parse() runtime behavior. - * + * * @example * ```typescript * const result = parse(schema, xml); * // result is { Person: { firstName: string, ... } } * ``` */ -export type InferParsedSchema = +export type InferParsedSchema = T['element'] extends readonly ElementLike[] ? InferWrappedRootElementTypes : unknown; @@ -91,24 +93,26 @@ export type InferParsedSchema = * Infer wrapped root element types for parse() output. * Each root element's type is wrapped with its name: { ElementName: ContentType } */ -export type InferWrappedRootElementTypes = - E[number] extends infer El - ? El extends ElementLike - ? El extends { name: infer N } - ? N extends string - ? El extends { type: infer TypeName } - ? TypeName extends string - ? { [K in N]: InferTypeName } - : { [K in N]: InferTypeName } +export type InferWrappedRootElementTypes< + E extends readonly ElementLike[], + T extends SchemaLike, +> = E[number] extends infer El + ? El extends ElementLike + ? El extends { name: infer N } + ? N extends string + ? El extends { type: infer TypeName } + ? TypeName extends string + ? { [K in N]: InferTypeName } : { [K in N]: InferTypeName } - : unknown + : { [K in N]: InferTypeName } : unknown : unknown - : unknown; + : unknown + : unknown; /** * Infer TypeScript type for a specific element by name. - * + * * @example * ```typescript * type Person = InferElement; @@ -127,7 +131,7 @@ export type InferElement = /** * Infer all elements as a union type. - * + * * @example * ```typescript * type AnyElement = InferAllElements; @@ -158,17 +162,23 @@ export type InferTypeName = ? InferBuiltInType : TypeName extends keyof XsdBuiltInTypes ? XsdBuiltInTypes[TypeName] - // Strip namespace prefix and look up in schema types - // Use FindComplexTypeWithSchema to get both the type AND the schema it was found in - : FindComplexTypeWithSchema, T> extends infer Result + : // Strip namespace prefix and look up in schema types + // Use FindComplexTypeWithSchema to get both the type AND the schema it was found in + FindComplexTypeWithSchema< + StripNsPrefix, + T + > extends infer Result ? Result extends { type: infer CT; schema: infer S } ? CT extends ComplexTypeLike ? S extends SchemaLike - ? InferComplexType // Use the schema where the type was found! + ? InferComplexType // Use the schema where the type was found! : unknown : unknown - // Not found in complexType, look up in simpleType - : FindSimpleTypeWithSchema, T> extends infer STResult + : // Not found in complexType, look up in simpleType + FindSimpleTypeWithSchema< + StripNsPrefix, + T + > extends infer STResult ? STResult extends { type: infer ST; schema: infer _S } ? ST extends SimpleTypeLike ? InferSimpleType @@ -182,148 +192,174 @@ export type FindComplexType = // First try to find in current schema FindComplexTypeLocal extends infer Local ? [Local] extends [never] - // Not found locally, search in $imports - ? FindComplexTypeInImports + ? // Not found locally, search in $imports + FindComplexTypeInImports : Local : never; /** Find complexType WITH the schema it was found in (for proper context in inheritance) */ -export type FindComplexTypeWithSchema = +export type FindComplexTypeWithSchema< + Name extends string, + T extends SchemaLike, +> = // First try to find in current schema FindComplexTypeLocal extends infer Local ? [Local] extends [never] - // Not found locally, search in $imports - ? FindComplexTypeInImportsWithSchema + ? // Not found locally, search in $imports + FindComplexTypeInImportsWithSchema : { type: Local; schema: T } : never; /** Find complexType in $imports, returning both type and schema */ -export type FindComplexTypeInImportsWithSchema = - T['$imports'] extends readonly SchemaLike[] - ? FindComplexTypeInSchemaArrayWithSchema - : never; +export type FindComplexTypeInImportsWithSchema< + Name extends string, + T extends SchemaLike, +> = T['$imports'] extends readonly SchemaLike[] + ? FindComplexTypeInSchemaArrayWithSchema + : never; /** Search through array of schemas for complexType, returning both type and schema */ -export type FindComplexTypeInSchemaArrayWithSchema = - Schemas extends readonly [infer First, ...infer Rest] - ? First extends SchemaLike - ? FindComplexTypeWithSchema extends infer Found - ? [Found] extends [never] - ? Rest extends readonly SchemaLike[] +export type FindComplexTypeInSchemaArrayWithSchema< + Name extends string, + Schemas extends readonly SchemaLike[], +> = Schemas extends readonly [infer First, ...infer Rest] + ? First extends SchemaLike + ? FindComplexTypeWithSchema extends infer Found + ? [Found] extends [never] + ? Rest extends readonly SchemaLike[] + ? FindComplexTypeInSchemaArrayWithSchema + : never + : Found extends { type: ComplexTypeLike; schema: SchemaLike } + ? Found + : Rest extends readonly SchemaLike[] ? FindComplexTypeInSchemaArrayWithSchema : never - : Found extends { type: ComplexTypeLike; schema: SchemaLike } - ? Found - : Rest extends readonly SchemaLike[] - ? FindComplexTypeInSchemaArrayWithSchema - : never - : never : never - : never; + : never + : never; /** Find complexType in current schema only */ -export type FindComplexTypeLocal = - T['complexType'] extends readonly ComplexTypeLike[] - ? FindInArray - : T['complexType'] extends { readonly [key: string]: ComplexTypeLike } - ? Name extends keyof T['complexType'] - ? T['complexType'][Name] - : never - : never; +export type FindComplexTypeLocal< + Name extends string, + T extends SchemaLike, +> = T['complexType'] extends readonly ComplexTypeLike[] + ? FindInArray + : T['complexType'] extends { readonly [key: string]: ComplexTypeLike } + ? Name extends keyof T['complexType'] + ? T['complexType'][Name] + : never + : never; /** Find complexType in $imports (recursive) */ -export type FindComplexTypeInImports = - T['$imports'] extends readonly SchemaLike[] - ? FindComplexTypeInSchemaArray - : never; +export type FindComplexTypeInImports< + Name extends string, + T extends SchemaLike, +> = T['$imports'] extends readonly SchemaLike[] + ? FindComplexTypeInSchemaArray + : never; /** Search through array of schemas for complexType */ -export type FindComplexTypeInSchemaArray = - Schemas extends readonly [infer First, ...infer Rest] - ? First extends SchemaLike - ? FindComplexType extends infer Found - ? [Found] extends [never] - ? Rest extends readonly SchemaLike[] - ? FindComplexTypeInSchemaArray - : never - : Found - : never +export type FindComplexTypeInSchemaArray< + Name extends string, + Schemas extends readonly SchemaLike[], +> = Schemas extends readonly [infer First, ...infer Rest] + ? First extends SchemaLike + ? FindComplexType extends infer Found + ? [Found] extends [never] + ? Rest extends readonly SchemaLike[] + ? FindComplexTypeInSchemaArray + : never + : Found : never - : never; + : never + : never; /** Find a simpleType by name (searches in schema and $imports) */ export type FindSimpleType = // First try to find in current schema FindSimpleTypeLocal extends infer Local ? [Local] extends [never] - // Not found locally, search in $imports - ? FindSimpleTypeInImports + ? // Not found locally, search in $imports + FindSimpleTypeInImports : Local : never; /** Find simpleType in current schema only */ -export type FindSimpleTypeLocal = - T['simpleType'] extends readonly SimpleTypeLike[] - ? FindInArray - : T['simpleType'] extends { readonly [key: string]: SimpleTypeLike } - ? Name extends keyof T['simpleType'] - ? T['simpleType'][Name] - : never - : never; +export type FindSimpleTypeLocal< + Name extends string, + T extends SchemaLike, +> = T['simpleType'] extends readonly SimpleTypeLike[] + ? FindInArray + : T['simpleType'] extends { readonly [key: string]: SimpleTypeLike } + ? Name extends keyof T['simpleType'] + ? T['simpleType'][Name] + : never + : never; /** Find simpleType in $imports (recursive) */ -export type FindSimpleTypeInImports = - T['$imports'] extends readonly SchemaLike[] - ? FindSimpleTypeInSchemaArray - : never; +export type FindSimpleTypeInImports< + Name extends string, + T extends SchemaLike, +> = T['$imports'] extends readonly SchemaLike[] + ? FindSimpleTypeInSchemaArray + : never; /** Search through array of schemas for simpleType */ -export type FindSimpleTypeInSchemaArray = - Schemas extends readonly [infer First, ...infer Rest] - ? First extends SchemaLike - ? FindSimpleType extends infer Found - ? [Found] extends [never] - ? Rest extends readonly SchemaLike[] - ? FindSimpleTypeInSchemaArray - : never - : Found - : never +export type FindSimpleTypeInSchemaArray< + Name extends string, + Schemas extends readonly SchemaLike[], +> = Schemas extends readonly [infer First, ...infer Rest] + ? First extends SchemaLike + ? FindSimpleType extends infer Found + ? [Found] extends [never] + ? Rest extends readonly SchemaLike[] + ? FindSimpleTypeInSchemaArray + : never + : Found : never - : never; + : never + : never; /** Find simpleType WITH the schema it was found in */ -export type FindSimpleTypeWithSchema = +export type FindSimpleTypeWithSchema< + Name extends string, + T extends SchemaLike, +> = // First try to find in current schema FindSimpleTypeLocal extends infer Local ? [Local] extends [never] - // Not found locally, search in $imports - ? FindSimpleTypeInImportsWithSchema + ? // Not found locally, search in $imports + FindSimpleTypeInImportsWithSchema : { type: Local; schema: T } : never; /** Find simpleType in $imports, returning both type and schema */ -export type FindSimpleTypeInImportsWithSchema = - T['$imports'] extends readonly SchemaLike[] - ? FindSimpleTypeInSchemaArrayWithSchema - : never; +export type FindSimpleTypeInImportsWithSchema< + Name extends string, + T extends SchemaLike, +> = T['$imports'] extends readonly SchemaLike[] + ? FindSimpleTypeInSchemaArrayWithSchema + : never; /** Search through array of schemas for simpleType, returning both type and schema */ -export type FindSimpleTypeInSchemaArrayWithSchema = - Schemas extends readonly [infer First, ...infer Rest] - ? First extends SchemaLike - ? FindSimpleTypeWithSchema extends infer Found - ? [Found] extends [never] - ? Rest extends readonly SchemaLike[] +export type FindSimpleTypeInSchemaArrayWithSchema< + Name extends string, + Schemas extends readonly SchemaLike[], +> = Schemas extends readonly [infer First, ...infer Rest] + ? First extends SchemaLike + ? FindSimpleTypeWithSchema extends infer Found + ? [Found] extends [never] + ? Rest extends readonly SchemaLike[] + ? FindSimpleTypeInSchemaArrayWithSchema + : never + : Found extends { type: SimpleTypeLike; schema: SchemaLike } + ? Found + : Rest extends readonly SchemaLike[] ? FindSimpleTypeInSchemaArrayWithSchema : never - : Found extends { type: SimpleTypeLike; schema: SchemaLike } - ? Found - : Rest extends readonly SchemaLike[] - ? FindSimpleTypeInSchemaArrayWithSchema - : never - : never : never - : never; + : never + : never; // ============================================================================= // ComplexType Inference @@ -336,16 +372,18 @@ export type InferComplexType = ? Ext extends ExtensionLike ? InferExtension & InferComplexTypeContent : InferComplexTypeContent - // Handle simpleContent extension (text content with attributes) - : CT['simpleContent'] extends { extension: infer Ext } + : // Handle simpleContent extension (text content with attributes) + CT['simpleContent'] extends { extension: infer Ext } ? Ext extends SimpleExtensionLike ? InferSimpleContentExtension : InferComplexTypeContent : InferComplexTypeContent; /** Infer content from complexType (sequence, choice, all, attributes) */ -export type InferComplexTypeContent = - InferGroup & +export type InferComplexTypeContent< + CT extends ComplexTypeLike, + T extends SchemaLike, +> = InferGroup & InferGroup & InferChoice & InferAttributes; @@ -358,15 +396,19 @@ type EmptyObject = {}; export type InferExtension = // Inherit from base type (Ext['base'] extends string ? InferTypeName : EmptyObject) & - // Add own content - InferGroup & - InferGroup & - InferChoice & - InferAttributes; + // Add own content + InferGroup & + InferGroup & + InferChoice & + InferAttributes; /** Infer from simpleContent/extension (text content + attributes) */ -export type InferSimpleContentExtension = - (Ext['base'] extends string ? { _text: InferBuiltInType> } : EmptyObject) & +export type InferSimpleContentExtension< + Ext extends SimpleExtensionLike, + _T extends SchemaLike, +> = (Ext['base'] extends string + ? { $value: InferBuiltInType> } + : EmptyObject) & InferAttributes; // ============================================================================= @@ -374,40 +416,44 @@ export type InferSimpleContentExtension = - G extends GroupLike - ? InferElements & +export type InferGroup = G extends GroupLike + ? InferElements & InferNestedSequences & InferNestedChoices - : EmptyObject; + : EmptyObject; /** Infer from choice (union of possibilities) */ -export type InferChoice = - G extends GroupLike - ? Partial> - : EmptyObject; +export type InferChoice = G extends GroupLike + ? Partial> + : EmptyObject; /** Infer nested sequences */ -export type InferNestedSequences = - S extends readonly GroupLike[] - ? UnionToIntersection> - : EmptyObject; +export type InferNestedSequences< + S, + T extends SchemaLike, +> = S extends readonly GroupLike[] + ? UnionToIntersection> + : EmptyObject; /** Infer nested choices */ -export type InferNestedChoices = - C extends readonly GroupLike[] - ? Partial>> - : EmptyObject; +export type InferNestedChoices< + C, + T extends SchemaLike, +> = C extends readonly GroupLike[] + ? Partial>> + : EmptyObject; // ============================================================================= // Element Inference // ============================================================================= /** Infer from element array */ -export type InferElements = - E extends readonly ElementLike[] - ? InferRequiredElements & InferOptionalElements - : EmptyObject; +export type InferElements< + E, + T extends SchemaLike, +> = E extends readonly ElementLike[] + ? InferRequiredElements & InferOptionalElements + : EmptyObject; /** Find element by name or ref (after stripping prefix) */ type FindElementByName = @@ -415,14 +461,19 @@ type FindElementByName = ? E[number] extends infer El ? El extends { ref: infer R } ? R extends string - ? StripPrefix extends K ? El : never + ? StripPrefix extends K + ? El + : never : never : never : never : Extract; /** Infer required elements (minOccurs != 0) */ -export type InferRequiredElements = { +export type InferRequiredElements< + E extends readonly ElementLike[], + T extends SchemaLike, +> = { [K in ExtractRequiredElementNames]: InferElementType< FindElementByName, T @@ -430,7 +481,10 @@ export type InferRequiredElements = { +export type InferOptionalElements< + E extends readonly ElementLike[], + T extends SchemaLike, +> = { [K in ExtractOptionalElementNames]?: InferElementType< FindElementByName, T @@ -438,16 +492,21 @@ export type InferOptionalElements = - El extends { name: infer N } - ? N extends string ? N : never - : El extends { ref: infer R } - ? R extends string ? StripPrefix : never - : never; +type GetElementName = El extends { name: infer N } + ? N extends string + ? N + : never + : El extends { ref: infer R } + ? R extends string + ? StripPrefix + : never + : never; /** Check if element is optional (minOccurs is 0 or '0') */ type ElementIsOptional = El extends { minOccurs: infer M } - ? M extends 0 | '0' ? true : false + ? M extends 0 | '0' + ? true + : false : false; /** Extract names of required elements (distributive over union) */ @@ -456,7 +515,7 @@ export type ExtractRequiredElementNames = { ? ElementIsOptional extends true ? never : GetElementName - : never + : never; }[number]; /** Extract names of optional elements (distributive over union) */ @@ -465,7 +524,7 @@ export type ExtractOptionalElementNames = { ? ElementIsOptional extends true ? GetElementName : never - : never + : never; }[number]; /** Infer type for a single element */ @@ -475,18 +534,18 @@ export type InferElementType = ? Ref extends string ? WrapArray, El> : WrapArray - // Check for inline complexType - : El extends { complexType: infer CT } + : // Check for inline complexType + El extends { complexType: infer CT } ? CT extends ComplexTypeLike ? WrapArray, El> : WrapArray - // Check for inline simpleType - : El extends { simpleType: infer ST } + : // Check for inline simpleType + El extends { simpleType: infer ST } ? ST extends SimpleTypeLike ? WrapArray, El> : WrapArray - // Reference to named type - : El extends { type: infer TypeName } + : // Reference to named type + El extends { type: infer TypeName } ? TypeName extends string ? WrapArray, El> : WrapArray @@ -497,25 +556,27 @@ type InferElementRef = // First try to find in current schema's elements FindByName> extends infer Found ? [Found] extends [never] - // Not found in current schema - try $imports - ? InferElementFromImports - // Found in current schema - : Found extends ElementLike + ? // Not found in current schema - try $imports + InferElementFromImports + : // Found in current schema + Found extends ElementLike ? InferFoundElement : unknown : unknown; /** Infer type from a found element */ -type InferFoundElement = - Found extends { type: infer TypeName } - ? TypeName extends string - ? InferTypeName +type InferFoundElement< + Found extends ElementLike, + T extends SchemaLike, +> = Found extends { type: infer TypeName } + ? TypeName extends string + ? InferTypeName + : unknown + : Found extends { complexType: infer CT } + ? CT extends ComplexTypeLike + ? InferComplexType : unknown - : Found extends { complexType: infer CT } - ? CT extends ComplexTypeLike - ? InferComplexType - : unknown - : unknown; + : unknown; /** Try to find and infer element from $imports */ type InferElementFromImports = @@ -528,40 +589,42 @@ type InferElementFromImports = : unknown; /** Find element in $imports array */ -type FindElementInImports = - Imports extends readonly SchemaLike[] - ? Imports[number] extends infer S - ? S extends SchemaLike - ? FindByName> - : never +type FindElementInImports< + Ref extends string, + Imports, +> = Imports extends readonly SchemaLike[] + ? Imports[number] extends infer S + ? S extends SchemaLike + ? FindByName> : never - : never; + : never + : never; /** Wrap in array if maxOccurs > 1 or unbounded */ -export type WrapArray = - El extends { maxOccurs: 'unbounded' | infer Max } - ? Max extends 'unbounded' - ? T[] - : Max extends number - ? Max extends 0 | 1 - ? T - : T[] - : Max extends '0' | '1' - ? T // String '0' or '1' - single element - : Max extends `${number}` - ? T[] // String number > 1 - : T - : T; +export type WrapArray = El extends { + maxOccurs: 'unbounded' | infer Max; +} + ? Max extends 'unbounded' + ? T[] + : Max extends number + ? Max extends 0 | 1 + ? T + : T[] + : Max extends '0' | '1' + ? T // String '0' or '1' - single element + : Max extends `${number}` + ? T[] // String number > 1 + : T + : T; // ============================================================================= // Attribute Inference // ============================================================================= /** Infer from attribute array */ -export type InferAttributes = - A extends readonly AttributeLike[] - ? InferRequiredAttributes & InferOptionalAttributes - : EmptyObject; +export type InferAttributes = A extends readonly AttributeLike[] + ? InferRequiredAttributes & InferOptionalAttributes + : EmptyObject; /** Infer required attributes (use="required") */ export type InferRequiredAttributes = { @@ -600,28 +663,30 @@ export type ExtractOptionalAttributeNames = : never; /** Infer type for a single attribute */ -export type InferAttributeType = - Attr extends { type: infer TypeName } - ? TypeName extends string - ? InferBuiltInType> - : string - : string; +export type InferAttributeType = Attr extends { + type: infer TypeName; +} + ? TypeName extends string + ? InferBuiltInType> + : string + : string; // ============================================================================= // SimpleType Inference // ============================================================================= /** Infer from simpleType (enums, restrictions) */ -export type InferSimpleType = - ST extends { restriction: { enumeration: readonly { value: infer V }[] } } - ? V extends string - ? V +export type InferSimpleType = ST extends { + restriction: { enumeration: readonly { value: infer V }[] }; +} + ? V extends string + ? V + : string + : ST extends { restriction: { base: infer Base } } + ? Base extends string + ? InferBuiltInType> : string - : ST extends { restriction: { base: infer Base } } - ? Base extends string - ? InferBuiltInType> - : string - : string; + : string; // ============================================================================= // Built-in XSD Types @@ -679,31 +744,32 @@ export type XsdBuiltInTypes = { /** Infer built-in type by name */ export type InferBuiltInType = - Name extends keyof XsdBuiltInTypes - ? XsdBuiltInTypes[Name] - : unknown; + Name extends keyof XsdBuiltInTypes ? XsdBuiltInTypes[Name] : unknown; // ============================================================================= // Utility Types // ============================================================================= /** Strip any namespace prefix (e.g., xs:string -> string, atom:link -> link) */ -export type StripPrefix = - T extends `${string}:${infer Rest}` ? Rest : T; +export type StripPrefix = T extends `${string}:${infer Rest}` + ? Rest + : T; /** Find item in array by partial match */ -export type FindInArray = - Arr extends readonly [infer First, ...infer Rest] - ? First extends Match - ? First - : FindInArray - : Arr extends readonly (infer Item)[] - ? Item extends Match - ? Extract - : never - : never; +export type FindInArray = Arr extends readonly [ + infer First, + ...infer Rest, +] + ? First extends Match + ? First + : FindInArray + : Arr extends readonly (infer Item)[] + ? Item extends Match + ? Extract + : never + : never; -/** +/** * Find item in array by name property. * Works with both literal types ('abapClass') and widened types (string). * For widened arrays where name is `string`, returns the full item union. @@ -714,20 +780,20 @@ export type FindByName = ? First extends { name: Name } ? First : First extends { name: string } - ? Name extends First['name'] // Check if Name is assignable to the item's name + ? Name extends First['name'] // Check if Name is assignable to the item's name ? First : FindByName : FindByName - // Fallback for non-tuple arrays (widened types) - : Arr extends readonly (infer Item)[] + : // Fallback for non-tuple arrays (widened types) + Arr extends readonly (infer Item)[] ? Item extends { name: infer ItemName } ? ItemName extends string - // If item name is literal, check exact match - ? string extends ItemName - // Item name is widened to `string`, so any Name matches - ? Item - // Item name is literal, check if Name matches - : Name extends ItemName + ? // If item name is literal, check exact match + string extends ItemName + ? // Item name is widened to `string`, so any Name matches + Item + : // Item name is literal, check if Name matches + Name extends ItemName ? Item : never : never @@ -735,7 +801,8 @@ export type FindByName = : never; /** Convert union to intersection */ -export type UnionToIntersection = - (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void - ? I - : never; +export type UnionToIntersection = ( + U extends unknown ? (k: U) => void : never +) extends (k: infer I) => void + ? I + : never; diff --git a/packages/ts-xsd/src/walker/index.ts b/packages/ts-xsd/src/walker/index.ts index a828e4d8..4be9cd30 100644 --- a/packages/ts-xsd/src/walker/index.ts +++ b/packages/ts-xsd/src/walker/index.ts @@ -1,17 +1,17 @@ /** * Schema Walker - Generator-based traversal for W3C Schema objects - * + * * Provides a single source of truth for schema traversal logic. * All consumers (xml/parse, xml/build, interface-generator) use these * generators instead of reimplementing traversal. - * + * * @example * ```typescript * // Find a complexType by name (stops at first match) * for (const { ct, schema } of walkComplexTypes(rootSchema)) { * if (ct.name === 'PersonType') return { type: ct, schema }; * } - * + * * // Iterate all elements in a complexType (handles inheritance) * for (const { element, optional, array } of walkElements(complexType, schema)) { * console.log(element.name, optional ? '?' : '', array ? '[]' : ''); @@ -23,7 +23,14 @@ // 1. Parsed schemas at runtime (Schema from xsd/types.ts) // 2. `as const` literals for type inference (readonly arrays) // The "Like" types are loose enough to accept both. -import type { SchemaLike, ComplexTypeLike, ElementLike, AttributeLike, GroupLike, SimpleTypeLike } from '../xsd/schema-like'; +import type { + SchemaLike, + ComplexTypeLike, + ElementLike, + AttributeLike, + GroupLike, + SimpleTypeLike, +} from '../xsd/schema-like'; // ============================================================================= // Types @@ -79,11 +86,11 @@ export type WalkOptions = { /** * Walk all complexTypes in a schema and its $imports/$includes (depth-first). - * + * * @param schema - Root schema to start from * @param options - Walk options (e.g., includesOnly to skip $imports) * @yields ComplexType with the schema it was found in - * + * * @example * ```typescript * function findComplexType(name: string, schema: SchemaLike) { @@ -93,7 +100,10 @@ export type WalkOptions = { * } * ``` */ -export function* walkComplexTypes(schema: SchemaLike, options: WalkOptions = {}): Generator { +export function* walkComplexTypes( + schema: SchemaLike, + options: WalkOptions = {}, +): Generator { // Current schema's complexTypes const complexTypes = schema.complexType; if (complexTypes) { @@ -108,7 +118,7 @@ export function* walkComplexTypes(schema: SchemaLike, options: WalkOptions = {}) } } } - + // Yield complexTypes from redefine blocks (these override types from included schemas) // Redefine types are yielded FIRST so findComplexType finds them before the original if (schema.redefine) { @@ -120,7 +130,7 @@ export function* walkComplexTypes(schema: SchemaLike, options: WalkOptions = {}) } } } - + // Yield complexTypes from override blocks (XSD 1.1) if (schema.override) { for (const ovr of schema.override) { @@ -131,14 +141,14 @@ export function* walkComplexTypes(schema: SchemaLike, options: WalkOptions = {}) } } } - + // Recurse into $includes (same namespace - content is merged) if (schema.$includes) { for (const included of schema.$includes) { yield* walkComplexTypes(included, options); } } - + // Recurse into $imports (different namespace) - skip if includesOnly if (!options.includesOnly && schema.$imports) { for (const imported of schema.$imports) { @@ -150,7 +160,10 @@ export function* walkComplexTypes(schema: SchemaLike, options: WalkOptions = {}) /** * Walk all simpleTypes in a schema and its $imports/$includes. */ -export function* walkSimpleTypes(schema: SchemaLike, options: WalkOptions = {}): Generator { +export function* walkSimpleTypes( + schema: SchemaLike, + options: WalkOptions = {}, +): Generator { const simpleTypes = schema.simpleType; if (simpleTypes) { if (Array.isArray(simpleTypes)) { @@ -163,7 +176,7 @@ export function* walkSimpleTypes(schema: SchemaLike, options: WalkOptions = {}): } } } - + // Yield simpleTypes from redefine blocks (these override types from included schemas) if (schema.redefine) { for (const redef of schema.redefine) { @@ -174,7 +187,7 @@ export function* walkSimpleTypes(schema: SchemaLike, options: WalkOptions = {}): } } } - + // Yield simpleTypes from override blocks (XSD 1.1) if (schema.override) { for (const ovr of schema.override) { @@ -185,14 +198,14 @@ export function* walkSimpleTypes(schema: SchemaLike, options: WalkOptions = {}): } } } - + // Recurse into $includes (same namespace) if (schema.$includes) { for (const included of schema.$includes) { yield* walkSimpleTypes(included, options); } } - + // Recurse into $imports (different namespace) - skip if includesOnly if (!options.includesOnly && schema.$imports) { for (const imported of schema.$imports) { @@ -204,20 +217,23 @@ export function* walkSimpleTypes(schema: SchemaLike, options: WalkOptions = {}): /** * Walk all top-level elements in a schema and its $imports/$includes. */ -export function* walkTopLevelElements(schema: SchemaLike, options: WalkOptions = {}): Generator { +export function* walkTopLevelElements( + schema: SchemaLike, + options: WalkOptions = {}, +): Generator { if (schema.element) { for (const element of schema.element) { yield { element, schema }; } } - + // Recurse into $includes (same namespace) if (schema.$includes) { for (const included of schema.$includes) { yield* walkTopLevelElements(included, options); } } - + // Recurse into $imports (different namespace) - skip if includesOnly if (!options.includesOnly && schema.$imports) { for (const imported of schema.$imports) { @@ -236,7 +252,7 @@ export function* walkTopLevelElements(schema: SchemaLike, options: WalkOptions = */ export function findComplexType( name: string, - schema: SchemaLike + schema: SchemaLike, ): ComplexTypeEntry | undefined { for (const entry of walkComplexTypes(schema)) { if (entry.ct.name === name) { @@ -251,7 +267,7 @@ export function findComplexType( */ export function findSimpleType( name: string, - schema: SchemaLike + schema: SchemaLike, ): SimpleTypeEntry | undefined { for (const entry of walkSimpleTypes(schema)) { if (entry.st.name === name) { @@ -266,7 +282,7 @@ export function findSimpleType( */ export function findElement( name: string, - schema: SchemaLike + schema: SchemaLike, ): TopLevelElementEntry | undefined { for (const entry of walkTopLevelElements(schema)) { if (entry.element.name === name) { @@ -286,19 +302,19 @@ export function findElement( * - Nested groups (recursive) * - complexContent/extension inheritance * - Group references - * + * * @param ct - ComplexType to walk * @param schema - Schema context (for resolving base types and group refs) * @yields Elements with metadata (optional, array, source) */ export function* walkElements( ct: ComplexTypeLike, - schema: SchemaLike + schema: SchemaLike, ): Generator { // Handle complexContent/extension (inheritance) if (ct.complexContent?.extension) { const ext = ct.complexContent.extension; - + // First yield inherited elements from base type if (ext.base) { const baseName = stripNsPrefix(ext.base); @@ -308,19 +324,19 @@ export function* walkElements( yield* walkElements(baseEntry.ct, baseEntry.schema); } } - + // Then yield extension's own elements yield* walkGroup(ext.sequence, 'sequence', schema); yield* walkGroup(ext.choice, 'choice', schema); yield* walkGroup(ext.all, 'all', schema); - + // Handle group reference in extension if (ext.group?.ref) { yield* walkGroupRef(ext.group.ref, schema); } return; } - + // Handle complexContent/restriction if (ct.complexContent?.restriction) { const rest = ct.complexContent.restriction; @@ -332,12 +348,12 @@ export function* walkElements( } return; } - + // Direct content (no complexContent) yield* walkGroup(ct.sequence, 'sequence', schema); yield* walkGroup(ct.choice, 'choice', schema); yield* walkGroup(ct.all, 'all', schema); - + // Handle group reference if (ct.group?.ref) { yield* walkGroupRef(ct.group.ref, schema); @@ -352,28 +368,33 @@ function* walkGroup( source: 'sequence' | 'choice' | 'all', schema: SchemaLike, parentOptional = false, - parentArray = false + parentArray = false, ): Generator { if (!group) return; - + // Check group-level minOccurs/maxOccurs - const groupOptional = parentOptional || group.minOccurs === 0 || group.minOccurs === '0'; + const groupOptional = + parentOptional || group.minOccurs === 0 || group.minOccurs === '0'; const groupArray = parentArray || isArray(group); - + // Elements in choice are always optional (only one is selected) const choiceOptional = source === 'choice'; - + // Yield direct elements if (group.element) { for (const element of group.element) { - const optional = choiceOptional || groupOptional || element.minOccurs === 0 || element.minOccurs === '0'; + const optional = + choiceOptional || + groupOptional || + element.minOccurs === 0 || + element.minOccurs === '0'; const array = groupArray || isArray(element); - + // Handle element reference to abstract element with substitution group if (element.ref) { const refName = stripNsPrefix(element.ref); const refEntry = findElement(refName, schema); - + if (refEntry && isAbstractElement(refEntry.element)) { // Abstract element - yield substitutes if found in this schema const substitutes = findSubstitutes(refName, schema); @@ -387,33 +408,46 @@ function* walkGroup( // so the parser can handle substitution using the root schema } } - + yield { element, optional, array, source }; } } - + // Recurse into nested sequences if (group.sequence) { - const sequences = Array.isArray(group.sequence) ? group.sequence : [group.sequence]; + const sequences = Array.isArray(group.sequence) + ? group.sequence + : [group.sequence]; for (const nested of sequences) { yield* walkGroup(nested, 'sequence', schema, groupOptional, groupArray); } } - + // Recurse into nested choices (elements become optional) if (group.choice) { const choices = Array.isArray(group.choice) ? group.choice : [group.choice]; for (const nested of choices) { - yield* walkGroup(nested, 'choice', schema, true, groupArray || isArray(nested)); + yield* walkGroup( + nested, + 'choice', + schema, + true, + groupArray || isArray(nested), + ); } } - + // Handle group references within the group if (group.group) { const refs = Array.isArray(group.group) ? group.group : [group.group]; for (const ref of refs) { if (ref.ref) { - yield* walkGroupRef(ref.ref, schema, groupOptional || choiceOptional, groupArray || isArray(ref)); + yield* walkGroupRef( + ref.ref, + schema, + groupOptional || choiceOptional, + groupArray || isArray(ref), + ); } } } @@ -426,15 +460,21 @@ function* walkGroupRef( ref: string, schema: SchemaLike, parentOptional = false, - parentArray = false + parentArray = false, ): Generator { const groupName = stripNsPrefix(ref); const group = findGroup(groupName, schema); - + if (group) { // Group can have sequence/choice/all if (group.sequence) { - yield* walkGroup(group.sequence, 'sequence', schema, parentOptional, parentArray); + yield* walkGroup( + group.sequence, + 'sequence', + schema, + parentOptional, + parentArray, + ); } if (group.choice) { yield* walkGroup(group.choice, 'choice', schema, true, parentArray); @@ -455,12 +495,12 @@ function* walkGroupRef( */ export function* walkAttributes( ct: ComplexTypeLike, - schema: SchemaLike + schema: SchemaLike, ): Generator { // Handle complexContent/extension if (ct.complexContent?.extension) { const ext = ct.complexContent.extension; - + // Inherited attributes from base if (ext.base) { const baseName = stripNsPrefix(ext.base); @@ -469,22 +509,26 @@ export function* walkAttributes( yield* walkAttributes(baseEntry.ct, baseEntry.schema); } } - + // Extension's own attributes (resolve refs) if (ext.attribute) { for (const attr of ext.attribute) { const resolved = resolveAttribute(attr, schema); if (resolved) { - yield { attribute: resolved, required: resolved.use === 'required', schema }; + yield { + attribute: resolved, + required: resolved.use === 'required', + schema, + }; } } } - + // AttributeGroup references yield* walkAttributeGroupRefs(ext.attributeGroup, schema); return; } - + // Handle simpleContent/extension if (ct.simpleContent?.extension) { const ext = ct.simpleContent.extension; @@ -492,24 +536,32 @@ export function* walkAttributes( for (const attr of ext.attribute) { const resolved = resolveAttribute(attr, schema); if (resolved) { - yield { attribute: resolved, required: resolved.use === 'required', schema }; + yield { + attribute: resolved, + required: resolved.use === 'required', + schema, + }; } } } yield* walkAttributeGroupRefs(ext.attributeGroup, schema); return; } - + // Direct attributes (resolve refs) if (ct.attribute) { for (const attr of ct.attribute) { const resolved = resolveAttribute(attr, schema); if (resolved) { - yield { attribute: resolved, required: resolved.use === 'required', schema }; + yield { + attribute: resolved, + required: resolved.use === 'required', + schema, + }; } } } - + // AttributeGroup references yield* walkAttributeGroupRefs(ct.attributeGroup, schema); } @@ -519,10 +571,10 @@ export function* walkAttributes( */ function* walkAttributeGroupRefs( refs: readonly unknown[] | undefined, - schema: SchemaLike + schema: SchemaLike, ): Generator { if (!refs) return; - + for (const ref of refs) { const refObj = ref as { ref?: string }; if (refObj.ref) { @@ -546,15 +598,20 @@ function* walkAttributeGroupRefs( */ function findGroup( name: string, - schema: SchemaLike + schema: SchemaLike, ): { sequence?: GroupLike; choice?: GroupLike; all?: GroupLike } | undefined { // Search in current schema if (schema.group) { - for (const g of schema.group as Array<{ name?: string; sequence?: GroupLike; choice?: GroupLike; all?: GroupLike }>) { + for (const g of schema.group as Array<{ + name?: string; + sequence?: GroupLike; + choice?: GroupLike; + all?: GroupLike; + }>) { if (g.name === name) return g; } } - + // Search in $includes (same namespace) if (schema.$includes) { for (const included of schema.$includes) { @@ -562,7 +619,7 @@ function findGroup( if (found) return found; } } - + // Search in $imports (different namespace) if (schema.$imports) { for (const imported of schema.$imports) { @@ -570,7 +627,7 @@ function findGroup( if (found) return found; } } - + return undefined; } @@ -580,7 +637,7 @@ function findGroup( */ function findAttribute( name: string, - schema: SchemaLike + schema: SchemaLike, ): AttributeLike | undefined { // Search in current schema's top-level attributes const schemaWithAttrs = schema as { attribute?: readonly AttributeLike[] }; @@ -589,7 +646,7 @@ function findAttribute( if (attr.name === name) return attr; } } - + // Search in $includes (same namespace) if (schema.$includes) { for (const included of schema.$includes) { @@ -597,7 +654,7 @@ function findAttribute( if (found) return found; } } - + // Search in $imports (different namespace) if (schema.$imports) { for (const imported of schema.$imports) { @@ -605,7 +662,7 @@ function findAttribute( if (found) return found; } } - + return undefined; } @@ -615,7 +672,7 @@ function findAttribute( */ function resolveAttribute( attribute: AttributeLike, - schema: SchemaLike + schema: SchemaLike, ): AttributeLike | undefined { // If attribute has a ref, resolve it if (attribute.ref) { @@ -644,14 +701,17 @@ function resolveAttribute( */ function findAttributeGroup( name: string, - schema: SchemaLike + schema: SchemaLike, ): { attribute?: readonly AttributeLike[] } | undefined { if (schema.attributeGroup) { - for (const g of schema.attributeGroup as Array<{ name?: string; attribute?: readonly AttributeLike[] }>) { + for (const g of schema.attributeGroup as Array<{ + name?: string; + attribute?: readonly AttributeLike[]; + }>) { if (g.name === name) return g; } } - + // Search in $includes (same namespace) if (schema.$includes) { for (const included of schema.$includes) { @@ -659,7 +719,7 @@ function findAttributeGroup( if (found) return found; } } - + // Search in $imports (different namespace) if (schema.$imports) { for (const imported of schema.$imports) { @@ -667,7 +727,7 @@ function findAttributeGroup( if (found) return found; } } - + return undefined; } @@ -683,7 +743,6 @@ export function stripNsPrefix(name: string): string { return colonIndex >= 0 ? name.slice(colonIndex + 1) : name; } - /** * Check if element/group has maxOccurs > 1 (is array) */ @@ -706,8 +765,10 @@ function isArray(item: { maxOccurs?: number | string | 'unbounded' }): boolean { * Check if an element is abstract */ export function isAbstractElement(element: ElementLike): boolean { - return (element as { abstract?: boolean | string }).abstract === true || - (element as { abstract?: boolean | string }).abstract === 'true'; + return ( + (element as { abstract?: boolean | string }).abstract === true || + (element as { abstract?: boolean | string }).abstract === 'true' + ); } /** @@ -717,13 +778,14 @@ export function isAbstractElement(element: ElementLike): boolean { */ export function findSubstitutes( abstractElementName: string, - schema: SchemaLike + schema: SchemaLike, ): ElementLike[] { const substitutes: ElementLike[] = []; - + // Walk all top-level elements looking for substitutionGroup for (const { element } of walkTopLevelElements(schema)) { - const subGroup = (element as { substitutionGroup?: string }).substitutionGroup; + const subGroup = (element as { substitutionGroup?: string }) + .substitutionGroup; if (subGroup) { const subGroupName = stripNsPrefix(subGroup); if (subGroupName === abstractElementName) { @@ -731,6 +793,6 @@ export function findSubstitutes( } } } - + return substitutes; } diff --git a/packages/ts-xsd/src/xml/build-utils.ts b/packages/ts-xsd/src/xml/build-utils.ts index 6e384b12..77a471f0 100644 --- a/packages/ts-xsd/src/xml/build-utils.ts +++ b/packages/ts-xsd/src/xml/build-utils.ts @@ -29,7 +29,7 @@ export interface BuildOptions { */ export function getSchemaPrefix(schema: SchemaLike): string | undefined { if (!schema.$xmlns || !schema.targetNamespace) return undefined; - + for (const [prefix, uri] of Object.entries(schema.$xmlns)) { if (uri === schema.targetNamespace && prefix) { return prefix; @@ -50,11 +50,15 @@ export function createXmlDocument(schema: SchemaLike): XmlDocument { /** * Collect all namespace declarations from a schema and its $imports recursively */ -function collectAllNamespaces(schema: SchemaLike, collected: Map = new Map(), visited: Set = new Set()): Map { +function collectAllNamespaces( + schema: SchemaLike, + collected: Map = new Map(), + visited: Set = new Set(), +): Map { // Prevent infinite recursion if (visited.has(schema)) return collected; visited.add(schema); - + // Add namespaces from this schema's $xmlns if (schema.$xmlns) { for (const [pfx, uri] of Object.entries(schema.$xmlns)) { @@ -63,7 +67,7 @@ function collectAllNamespaces(schema: SchemaLike, collected: Map } } } - + // Recursively collect from $imports const imports = (schema as { $imports?: SchemaLike[] }).$imports; if (imports) { @@ -71,7 +75,7 @@ function collectAllNamespaces(schema: SchemaLike, collected: Map collectAllNamespaces(imported, collected, visited); } } - + // Also collect from $includes const includes = (schema as { $includes?: SchemaLike[] }).$includes; if (includes) { @@ -79,13 +83,13 @@ function collectAllNamespaces(schema: SchemaLike, collected: Map collectAllNamespaces(included, collected, visited); } } - + return collected; } /** * Create root element with namespace declarations - * + * * When elementFormDefault="unqualified", the root element should NOT have * a namespace prefix. This is important for formats like abapGit where * the root element (abapGit) is unqualified but child elements may have prefixes. @@ -94,15 +98,16 @@ export function createRootElement( doc: XmlDocument, elementName: string, schema: SchemaLike, - prefix: string | undefined + prefix: string | undefined, ): XmlElement { const ns = schema.targetNamespace || null; - + // Check elementFormDefault - when "unqualified", root element should NOT have prefix // This follows the abapGit pattern where root is unqualified but xmlns:asx is declared - const elementFormDefault = (schema as { elementFormDefault?: string }).elementFormDefault; + const elementFormDefault = (schema as { elementFormDefault?: string }) + .elementFormDefault; const usePrefix = elementFormDefault === 'unqualified' ? undefined : prefix; - + const rootTag = usePrefix ? `${usePrefix}:${elementName}` : elementName; const root = doc.createElement(rootTag); @@ -117,7 +122,7 @@ export function createRootElement( // Collect ALL namespace declarations from schema and its $imports recursively // This ensures that namespaces used by inherited types are declared const allNamespaces = collectAllNamespaces(schema); - + for (const [pfx, uri] of allNamespaces) { if (pfx && pfx !== prefix) { root.setAttribute(`xmlns:${pfx}`, uri); @@ -135,10 +140,10 @@ export function createRootElement( export function findElementDeclaration( schema: SchemaLike, rootElement?: string, - _data?: Record + _data?: Record, ): ElementLike { if (rootElement) { - const elementDecl = schema.element?.find(e => e.name === rootElement); + const elementDecl = schema.element?.find((e) => e.name === rootElement); if (!elementDecl) { throw new Error(`Element '${rootElement}' not found in schema`); } @@ -164,12 +169,12 @@ export function findElementDeclaration( */ export function getElementComplexType( elementDecl: ElementLike, - schema: SchemaLike + schema: SchemaLike, ): { type: ComplexTypeLike; schema: SchemaLike } { if (elementDecl.complexType) { return { type: elementDecl.complexType as ComplexTypeLike, schema }; } - + if (elementDecl.type) { const typeName = stripNsPrefix(elementDecl.type); const typeEntry = findComplexType(typeName, schema); @@ -178,8 +183,10 @@ export function getElementComplexType( } return { type: typeEntry.ct, schema: typeEntry.schema }; } - - throw new Error(`Element ${elementDecl.name} has no type or inline complexType`); + + throw new Error( + `Element ${elementDecl.name} has no type or inline complexType`, + ); } /** @@ -202,7 +209,7 @@ export function formatValue(value: unknown, type: string): string { /** * Simple XML formatter (basic indentation) - * + * * Keeps text content inline: text * Only adds newlines for nested elements */ @@ -215,7 +222,7 @@ export function formatXml(xml: string): string { for (let i = 0; i < parts.length; i++) { const part = parts[i]; const nextPart = parts[i + 1]; - + if (part.startsWith(' }).$xmlns; if (!xmlns) return undefined; - + // Find prefix that maps to this namespace for (const [prefix, ns] of Object.entries(xmlns)) { if (ns === targetNs) { @@ -54,7 +57,7 @@ import type { BuildOptions } from './build-utils'; export function build( schema: T, data: unknown, - options: BuildOptions = {} + options: BuildOptions = {}, ): string { const { xmlDecl = true, encoding = 'utf-8', pretty = false } = options; const prefix = options.prefix ?? getSchemaPrefix(schema); @@ -65,7 +68,7 @@ export function build( let elementDecl: ElementLike | undefined; let elementSchema: SchemaLike = schema; let elementData = data as Record; - + if (options.rootElement) { // Search in main schema and $imports const found = findElement(options.rootElement, schema); @@ -89,10 +92,13 @@ export function build( elementDecl = found.element; elementSchema = found.schema; // Unwrap the data - elementData = elementData[potentialElementName] as Record; + elementData = elementData[potentialElementName] as Record< + string, + unknown + >; } } - + // Fallback to matching by data structure if not wrapped if (!elementDecl) { elementDecl = findMatchingElement(elementData, schema); @@ -105,7 +111,7 @@ export function build( // Get the complexType - either inline or by reference let rootType: ComplexTypeLike; let rootSchema: SchemaLike = elementSchema; - + if (elementDecl.complexType) { rootType = elementDecl.complexType as ComplexTypeLike; } else if (elementDecl.type) { @@ -117,7 +123,9 @@ export function build( rootType = rootTypeEntry.ct; rootSchema = rootTypeEntry.schema; } else { - throw new Error(`Element ${elementDecl.name} has no type or inline complexType`); + throw new Error( + `Element ${elementDecl.name} has no type or inline complexType`, + ); } // Create root element with namespace declarations @@ -128,13 +136,13 @@ export function build( const root = createRootElement(doc, elementName, schema, prefix); buildElement(doc, root, elementData, rootType, rootSchema, schema, prefix); - + // Ensure root element is never self-closing (SAP ADT requires closing tags) // If root has no child nodes, add an empty text node to force instead of /> if (!root.hasChildNodes()) { root.appendChild(doc.createTextNode('')); } - + doc.appendChild(root); let xml = new XMLSerializer().serializeToString(doc); @@ -156,17 +164,20 @@ export function build( */ function findMatchingElement( data: Record, - schema: SchemaLike + schema: SchemaLike, ): ElementLike | undefined { const dataKeys = new Set(Object.keys(data)); let bestMatch: ElementLike | undefined; let bestScore = -1; // Helper to score an element against the data - const scoreElement = (element: ElementLike, searchSchema: SchemaLike): number => { + const scoreElement = ( + element: ElementLike, + searchSchema: SchemaLike, + ): number => { let ct: ComplexTypeLike | undefined; let ctSchema: SchemaLike = searchSchema; - + // Handle inline complexType if (element.complexType) { ct = element.complexType as ComplexTypeLike; @@ -178,7 +189,7 @@ function findMatchingElement( ctSchema = typeEntry.schema; } } - + if (!ct) return 0; // Get all field names from this type using walker @@ -191,7 +202,7 @@ function findMatchingElement( } let score = 0; - dataKeys.forEach(key => { + dataKeys.forEach((key) => { if (typeFields.has(key)) score++; }); return score; @@ -215,7 +226,7 @@ function findMatchingElement( for (const importedSchema of imports) { const importedElements = importedSchema.element; if (!importedElements) continue; - + for (const element of importedElements) { const score = scoreElement(element, importedSchema); if (score > bestScore) { @@ -246,30 +257,41 @@ function buildElement( typeDef: ComplexTypeLike, schema: SchemaLike, rootSchema: SchemaLike, - prefix: string | undefined + prefix: string | undefined, ): void { // Build attributes using walker (handles inheritance) // The walker now returns the schema where each attribute is defined, // which is critical for correct namespace prefix resolution in inherited types - for (const { attribute, schema: attrSchema } of walkAttributes(typeDef, schema)) { + for (const { attribute, schema: attrSchema } of walkAttributes( + typeDef, + schema, + )) { if (!attribute.name) continue; const value = data[attribute.name]; if (value !== undefined && value !== null) { // Check attributeFormDefault - attributes get prefix when "qualified" // Use the schema where the attribute is defined (from walker), not the current schema - const attributeFormDefault = (attrSchema as { attributeFormDefault?: string }).attributeFormDefault; + const attributeFormDefault = ( + attrSchema as { attributeFormDefault?: string } + ).attributeFormDefault; const attrForm = (attribute as { form?: string }).form; - + let attrName = attribute.name; // Priority: 1. Per-attribute form, 2. Schema attributeFormDefault - if (attrForm === 'qualified' || (attrForm !== 'unqualified' && attributeFormDefault === 'qualified')) { + if ( + attrForm === 'qualified' || + (attrForm !== 'unqualified' && attributeFormDefault === 'qualified') + ) { // Get prefix for the attribute's defining schema's namespace const attrPrefix = getPrefixForSchema(attrSchema, rootSchema); if (attrPrefix) { attrName = `${attrPrefix}:${attribute.name}`; } } - node.setAttribute(attrName, formatValue(value, attribute.type || 'string')); + node.setAttribute( + attrName, + formatValue(value, attribute.type || 'string'), + ); } } @@ -279,37 +301,59 @@ function buildElement( if (element.ref) { const refName = stripNsPrefix(element.ref); const refElement = findElement(refName, schema); - + if (refElement && refElement.element.abstract) { // Abstract element - find substitutes in data using rootSchema const substitutes = findSubstitutes(refName, rootSchema); for (const substitute of substitutes) { const subName = substitute.element.name; if (!subName) continue; - + const value = data[subName]; if (value !== undefined) { - const typeName = substitute.element.type ? stripNsPrefix(substitute.element.type) : undefined; - buildField(doc, node, value, subName, typeName, substitute.schema, rootSchema, prefix); + const typeName = substitute.element.type + ? stripNsPrefix(substitute.element.type) + : undefined; + buildField( + doc, + node, + value, + subName, + typeName, + substitute.schema, + rootSchema, + prefix, + ); } } continue; } } - + const resolved = resolveElementInfo(element, schema); if (!resolved) continue; - + const value = data[resolved.dataKey]; if (value !== undefined) { - buildFieldWithTagName(doc, node, value, resolved.tagName, resolved.typeName, resolved.inlineComplexType, resolved.elementSchema, rootSchema, prefix, resolved.form); + buildFieldWithTagName( + doc, + node, + value, + resolved.tagName, + resolved.typeName, + resolved.inlineComplexType, + resolved.elementSchema, + rootSchema, + prefix, + resolved.form, + ); } } } /** * Resolve element info (name and type), handling ref - * + * * Returns: * - tagName: The XML tag name to use (may include prefix like "asx:abap") * - dataKey: The key to look up in data object (local name without prefix) @@ -320,15 +364,17 @@ function buildElement( */ function resolveElementInfo( element: ElementLike, - schema: SchemaLike -): { - tagName: string; - dataKey: string; - typeName: string | undefined; - inlineComplexType: ComplexTypeLike | undefined; - elementSchema: SchemaLike; - form: string | undefined; -} | undefined { + schema: SchemaLike, +): + | { + tagName: string; + dataKey: string; + typeName: string | undefined; + inlineComplexType: ComplexTypeLike | undefined; + elementSchema: SchemaLike; + form: string | undefined; + } + | undefined { // Direct element with name if (element.name) { return { @@ -340,7 +386,7 @@ function resolveElementInfo( form: (element as { form?: string }).form, }; } - + // Handle element reference - get type from referenced element declaration // IMPORTANT: Keep the original ref (with prefix) for the tag name // This ensures elements like ref="asx:abap" render as @@ -351,22 +397,33 @@ function resolveElementInfo( return { tagName: element.ref, // Keep original ref with prefix for tag dataKey: refElement.element.name ?? refName, // Local name for data lookup - typeName: refElement.element.type ? stripNsPrefix(refElement.element.type) : undefined, - inlineComplexType: refElement.element.complexType as ComplexTypeLike | undefined, + typeName: refElement.element.type + ? stripNsPrefix(refElement.element.type) + : undefined, + inlineComplexType: refElement.element.complexType as + | ComplexTypeLike + | undefined, elementSchema: refElement.schema, form: undefined, // Refs always use their prefix }; } // Fallback: use ref as tag, local name for data - return { tagName: element.ref, dataKey: refName, typeName: undefined, inlineComplexType: undefined, elementSchema: schema, form: undefined }; + return { + tagName: element.ref, + dataKey: refName, + typeName: undefined, + inlineComplexType: undefined, + elementSchema: schema, + form: undefined, + }; } - + return undefined; } /** * Build a field (child element) - * + * * Respects elementFormDefault: * - "qualified": local elements get namespace prefix * - "unqualified" (default): local elements do NOT get namespace prefix @@ -379,16 +436,17 @@ function buildField( typeName: string | undefined, schema: SchemaLike, rootSchema: SchemaLike, - prefix: string | undefined + prefix: string | undefined, ): void { if (value === undefined || value === null) return; // Search for nested complexType const nestedType = typeName ? findComplexType(typeName, schema) : undefined; - + // Check elementFormDefault - local elements only get prefix when "qualified" // Default is "unqualified" per XSD spec - const elementFormDefault = (rootSchema as { elementFormDefault?: string }).elementFormDefault; + const elementFormDefault = (rootSchema as { elementFormDefault?: string }) + .elementFormDefault; const usePrefix = elementFormDefault === 'qualified' ? prefix : undefined; const tagName = usePrefix ? `${usePrefix}:${elementName}` : elementName; @@ -396,7 +454,15 @@ function buildField( for (const item of value) { const child = doc.createElement(tagName); if (nestedType) { - buildElement(doc, child, item as Record, nestedType.ct, nestedType.schema, rootSchema, prefix); + buildElement( + doc, + child, + item as Record, + nestedType.ct, + nestedType.schema, + rootSchema, + prefix, + ); } else { // Only add text node if value is not empty (allows self-closing tags) const text = formatValue(item, typeName || 'string'); @@ -407,7 +473,15 @@ function buildField( } else { const child = doc.createElement(tagName); if (nestedType) { - buildElement(doc, child, value as Record, nestedType.ct, nestedType.schema, rootSchema, prefix); + buildElement( + doc, + child, + value as Record, + nestedType.ct, + nestedType.schema, + rootSchema, + prefix, + ); } else { // Only add text node if value is not empty (allows self-closing tags) const text = formatValue(value, typeName || 'string'); @@ -419,7 +493,7 @@ function buildField( /** * Build a field with an explicit tag name (used for element refs with prefix) - * + * * Handles three cases: * 1. Element refs with prefix (e.g., ref="asx:abap") - use tagName directly * 2. Elements with form="unqualified" - never use prefix @@ -435,7 +509,7 @@ function buildFieldWithTagName( elementSchema: SchemaLike, rootSchema: SchemaLike, prefix: string | undefined, - elementForm: string | undefined + elementForm: string | undefined, ): void { if (value === undefined || value === null) return; @@ -462,7 +536,8 @@ function buildFieldWithTagName( usePrefix = prefix; } else { // No element-level form - use schema default - const elementFormDefault = (rootSchema as { elementFormDefault?: string }).elementFormDefault; + const elementFormDefault = (rootSchema as { elementFormDefault?: string }) + .elementFormDefault; usePrefix = elementFormDefault === 'qualified' ? prefix : undefined; } actualTagName = usePrefix ? `${usePrefix}:${tagName}` : tagName; @@ -472,7 +547,15 @@ function buildFieldWithTagName( for (const item of value) { const child = doc.createElement(actualTagName); if (nestedType) { - buildElement(doc, child, item as Record, nestedType.ct, nestedType.schema, rootSchema, prefix); + buildElement( + doc, + child, + item as Record, + nestedType.ct, + nestedType.schema, + rootSchema, + prefix, + ); } else { // Only add text node if value is not empty (allows self-closing tags) const text = formatValue(item, typeName || 'string'); @@ -483,7 +566,15 @@ function buildFieldWithTagName( } else { const child = doc.createElement(actualTagName); if (nestedType) { - buildElement(doc, child, value as Record, nestedType.ct, nestedType.schema, rootSchema, prefix); + buildElement( + doc, + child, + value as Record, + nestedType.ct, + nestedType.schema, + rootSchema, + prefix, + ); } else { // Only add text node if value is not empty (allows self-closing tags) const text = formatValue(value, typeName || 'string'); @@ -499,15 +590,15 @@ function buildFieldWithTagName( */ function findSubstitutes( abstractElementName: string, - schema: SchemaLike + schema: SchemaLike, ): Array<{ element: ElementLike; schema: SchemaLike }> { const substitutes: Array<{ element: ElementLike; schema: SchemaLike }> = []; - + // Helper to search in a single schema const searchSchema = (s: SchemaLike) => { const elements = s.element; if (!elements) return; - + for (const el of elements) { if (el.substitutionGroup) { const subGroupName = stripNsPrefix(el.substitutionGroup); @@ -517,10 +608,10 @@ function findSubstitutes( } } }; - + // Search in main schema searchSchema(schema); - + // Search in $imports const imports = schema.$imports as SchemaLike[] | undefined; if (imports) { @@ -528,7 +619,6 @@ function findSubstitutes( searchSchema(imported); } } - + return substitutes; } - diff --git a/packages/ts-xsd/src/xml/parse.ts b/packages/ts-xsd/src/xml/parse.ts index e686054a..3a1ee58b 100644 --- a/packages/ts-xsd/src/xml/parse.ts +++ b/packages/ts-xsd/src/xml/parse.ts @@ -1,12 +1,17 @@ /** * XML Parser for W3C Schema - * + * * Parse XML string to typed JavaScript object using W3C-compliant Schema definition. * Uses the walker module for schema traversal. */ import { DOMParser } from '@xmldom/xmldom'; -import type { InferParsedSchema, SchemaLike, ComplexTypeLike, ElementLike } from '../infer'; +import type { + InferParsedSchema, + SchemaLike, + ComplexTypeLike, + ElementLike, +} from '../infer'; import { findComplexType, findElement, @@ -28,15 +33,15 @@ import { */ function findSubstitutingElements( abstractElementName: string, - schema: SchemaLike + schema: SchemaLike, ): Array<{ element: ElementLike; schema: SchemaLike }> { const results: Array<{ element: ElementLike; schema: SchemaLike }> = []; - + // Helper to check elements in a schema const checkSchema = (s: SchemaLike) => { const elements = s.element; if (!elements) return; - + for (const el of elements) { if (el.substitutionGroup) { const subGroupName = stripNsPrefix(el.substitutionGroup); @@ -46,21 +51,24 @@ function findSubstitutingElements( } } }; - + // Check current schema checkSchema(schema); - + // Check all imported schemas const imports = (schema as { $imports?: SchemaLike[] }).$imports; if (imports) { for (const imported of imports) { checkSchema(imported); // Recursively check nested imports - const nestedResults = findSubstitutingElements(abstractElementName, imported); + const nestedResults = findSubstitutingElements( + abstractElementName, + imported, + ); results.push(...nestedResults); } } - + return results; } @@ -78,7 +86,7 @@ function isAbstractElement(elementName: string, schema: SchemaLike): boolean { } } } - + // Check imported schemas const imports = (schema as { $imports?: SchemaLike[] }).$imports; if (imports) { @@ -88,7 +96,7 @@ function isAbstractElement(elementName: string, schema: SchemaLike): boolean { } } } - + return false; } @@ -101,7 +109,7 @@ type XmlElement = Element; */ export function parse( schema: T, - xml: string + xml: string, ): InferParsedSchema { const doc = new DOMParser().parseFromString(xml, 'text/xml'); const root = doc.documentElement; @@ -115,25 +123,34 @@ export function parse( // Find the element declaration for this root const elementEntry = findElementByName(schema, rootLocalName); - + if (!elementEntry) { throw new Error(`Schema missing element declaration for: ${rootLocalName}`); } // Check for inline complexType first - const inlineComplexType = (elementEntry.element as { complexType?: ComplexTypeLike }).complexType; + const inlineComplexType = ( + elementEntry.element as { complexType?: ComplexTypeLike } + ).complexType; if (inlineComplexType) { - const content = parseElement(root, inlineComplexType, elementEntry.schema, schema); + const content = parseElement( + root, + inlineComplexType, + elementEntry.schema, + schema, + ); // Wrap result with root element name for type discrimination return { [rootLocalName]: content } as InferParsedSchema; } // Get the type name (strip namespace prefix if present) - const typeName = stripNsPrefix(elementEntry.element.type || elementEntry.element.name || ''); - + const typeName = stripNsPrefix( + elementEntry.element.type || elementEntry.element.name || '', + ); + // Find the complexType definition (searches current schema and $imports) const typeEntry = findComplexType(typeName, schema); - + if (!typeEntry) { throw new Error(`Schema missing complexType for: ${typeName}`); } @@ -148,20 +165,20 @@ export function parse( */ function findElementByName( schema: SchemaLike, - name: string + name: string, ): { element: ElementLike; schema: SchemaLike } | undefined { // Try exact match first using walker const exact = findElement(name, schema); if (exact) return exact; - + // Try case-insensitive match in current schema const elements = schema.element; if (elements) { const lowerName = name.toLowerCase(); - const found = elements.find(el => el.name?.toLowerCase() === lowerName); + const found = elements.find((el) => el.name?.toLowerCase() === lowerName); if (found) return { element: found, schema }; } - + return undefined; } @@ -177,7 +194,7 @@ function parseElement( node: XmlElement, typeDef: ComplexTypeLike, schema: SchemaLike, - rootSchema: SchemaLike + rootSchema: SchemaLike, ): Record { const result: Record = {}; @@ -193,7 +210,10 @@ function parseElement( if (value !== null) { result[attribute.name] = convertValue(value, attribute.type || 'string'); } else if (attribute.default !== undefined) { - result[attribute.name] = convertValue(String(attribute.default), attribute.type || 'string'); + result[attribute.name] = convertValue( + String(attribute.default), + attribute.type || 'string', + ); } } @@ -201,39 +221,53 @@ function parseElement( for (const { element, array } of walkElements(typeDef, schema)) { const resolved = resolveElementInfo(element, schema); if (!resolved) continue; - + // Check if this is a reference to an abstract element (substitution group head) // Use rootSchema for substitution lookups since substitutes can be in any imported schema const isAbstract = isAbstractElement(resolved.name, rootSchema); if (isAbstract) { // Find all elements that substitute for this abstract element const substitutes = findSubstitutingElements(resolved.name, rootSchema); - + // Get all child elements and check if any match a substituting element const allChildren = getAllChildElements(node); for (const child of allChildren) { const childName = getLocalName(child); - const substitute = substitutes.find(s => s.element.name === childName); + const substitute = substitutes.find( + (s) => s.element.name === childName, + ); if (substitute && substitute.element.name) { - const subTypeName = substitute.element.type ? stripNsPrefix(substitute.element.type) : undefined; - result[substitute.element.name] = parseChildValue(child, subTypeName, substitute.schema, rootSchema); + const subTypeName = substitute.element.type + ? stripNsPrefix(substitute.element.type) + : undefined; + result[substitute.element.name] = parseChildValue( + child, + subTypeName, + substitute.schema, + rootSchema, + ); } } } else { // Normal element handling const children = getChildElements(node, resolved.name); - + if (array || children.length > 1) { // Array element - const values = children.map(child => - parseChildValue(child, resolved.typeName, schema, rootSchema) + const values = children.map((child) => + parseChildValue(child, resolved.typeName, schema, rootSchema), ); if (values.length > 0) { result[resolved.name] = values; } } else if (children.length === 1) { // Single element - result[resolved.name] = parseChildValue(children[0], resolved.typeName, schema, rootSchema); + result[resolved.name] = parseChildValue( + children[0], + resolved.typeName, + schema, + rootSchema, + ); } } } @@ -248,7 +282,7 @@ function parseSimpleContent( node: XmlElement, typeDef: ComplexTypeLike, _schema: SchemaLike, - _rootSchema: SchemaLike + _rootSchema: SchemaLike, ): Record { const result: Record = {}; const simpleContent = typeDef.simpleContent; @@ -256,12 +290,12 @@ function parseSimpleContent( return result; } const ext = simpleContent.extension; - + // Get text content as $value const textContent = getTextContent(node); const baseType = ext.base ? stripNsPrefix(ext.base) : 'string'; result.$value = convertValue(textContent, baseType); - + // Parse attributes from simpleContent extension if (ext.attribute) { for (const attrDef of ext.attribute) { @@ -270,11 +304,14 @@ function parseSimpleContent( if (value !== null) { result[attrDef.name] = convertValue(value, attrDef.type || 'string'); } else if (attrDef.default !== undefined) { - result[attrDef.name] = convertValue(String(attrDef.default), attrDef.type || 'string'); + result[attrDef.name] = convertValue( + String(attrDef.default), + attrDef.type || 'string', + ); } } } - + return result; } @@ -283,7 +320,7 @@ function parseSimpleContent( */ function resolveElementInfo( element: ElementLike, - schema: SchemaLike + schema: SchemaLike, ): { name: string; typeName: string | undefined } | undefined { // Direct element with name if (element.name) { @@ -292,7 +329,7 @@ function resolveElementInfo( typeName: element.type ? stripNsPrefix(element.type) : undefined, }; } - + // Handle element reference - get type from referenced element declaration if (element.ref) { const refName = stripNsPrefix(element.ref); @@ -301,13 +338,15 @@ function resolveElementInfo( const name = refElement.element.name ?? refName; return { name, - typeName: refElement.element.type ? stripNsPrefix(refElement.element.type) : undefined, + typeName: refElement.element.type + ? stripNsPrefix(refElement.element.type) + : undefined, }; } // Fallback: use ref name, no type return { name: refName, typeName: undefined }; } - + return undefined; } @@ -318,15 +357,15 @@ function parseChildValue( child: XmlElement, typeName: string | undefined, schema: SchemaLike, - rootSchema: SchemaLike + rootSchema: SchemaLike, ): unknown { // Find nested complexType if this field has a complex type const nestedType = typeName ? findComplexType(typeName, schema) : undefined; - + if (nestedType) { return parseElement(child, nestedType.ct, nestedType.schema, rootSchema); } - + return convertValue(getTextContent(child) || '', typeName || 'string'); } @@ -335,7 +374,7 @@ function parseChildValue( */ function convertValue(value: string, type: string): unknown { const localType = stripNsPrefix(type); - + switch (localType) { case 'int': case 'integer': diff --git a/packages/ts-xsd/tests/integration/codegen-infer.test.ts b/packages/ts-xsd/tests/integration/codegen-infer.test.ts index 9ab60c94..a9c59cf7 100644 --- a/packages/ts-xsd/tests/integration/codegen-infer.test.ts +++ b/packages/ts-xsd/tests/integration/codegen-infer.test.ts @@ -1,18 +1,24 @@ /** * Codegen + Inference Integration Test - * + * * This test demonstrates the full flow: * 1. Generate TypeScript literals from XSD fixtures using codegen CLI * 2. Write to a reviewable output folder (tests/fixtures/generated/) * 3. Verify type inference works with the generated schemas - * + * * Input fixtures: tests/fixtures/xsd/*.xsd * Output schemas: tests/fixtures/generated/*.ts */ import { describe, test as it, before } from 'node:test'; import { strict as assert } from 'node:assert'; -import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync } from 'node:fs'; +import { + readFileSync, + writeFileSync, + mkdirSync, + existsSync, + readdirSync, +} from 'node:fs'; import { join, basename } from 'node:path'; import { execSync } from 'node:child_process'; import { generateSchemaFile } from '../../src/codegen'; @@ -32,7 +38,9 @@ describe('Codegen CLI Integration', () => { it('should generate schemas from all XSD fixtures', () => { // Get all XSD files in fixtures - const xsdFiles = readdirSync(FIXTURES_DIR).filter(f => f.endsWith('.xsd')); + const xsdFiles = readdirSync(FIXTURES_DIR).filter((f) => + f.endsWith('.xsd'), + ); assert.ok(xsdFiles.length > 0, 'Expected at least one XSD fixture'); console.log(`\nProcessing ${xsdFiles.length} XSD fixtures:`); @@ -70,7 +78,7 @@ describe('Codegen CLI Integration', () => { // Run CLI const result = execSync( `npx tsx ${CLI_PATH} ${inputPath} ${outputPath} --name=personCliSchema`, - { encoding: 'utf-8', cwd: join(import.meta.dirname, '../..') } + { encoding: 'utf-8', cwd: join(import.meta.dirname, '../..') }, ); console.log('\nCLI output:', result); @@ -100,7 +108,10 @@ describe('Codegen CLI Integration', () => { console.log(`Output: ${outputPath}`); // Verify it's substantial - assert.ok(tsContent.length > 50000, `Expected large output, got ${tsContent.length}`); + assert.ok( + tsContent.length > 50000, + `Expected large output, got ${tsContent.length}`, + ); assert.ok(tsContent.includes('"http://www.w3.org/2001/XMLSchema"')); }); }); @@ -109,25 +120,28 @@ describe('Type Inference with Generated Schemas', () => { it('should infer types from person schema structure', () => { // This schema structure matches what codegen produces from person.xsd const personSchema = { - targetNamespace: "http://example.com/person", - elementFormDefault: "qualified", - element: [ - { name: "Person", type: "tns:PersonType" }, - ], + targetNamespace: 'http://example.com/person', + elementFormDefault: 'qualified', + element: [{ name: 'Person', type: 'tns:PersonType' }], complexType: [ { - name: "PersonType", + name: 'PersonType', sequence: { element: [ - { name: "firstName", type: "xs:string" }, - { name: "lastName", type: "xs:string" }, - { name: "age", type: "xs:int", minOccurs: 0 }, - { name: "email", type: "xs:string", minOccurs: 0, maxOccurs: "unbounded" as const }, + { name: 'firstName', type: 'xs:string' }, + { name: 'lastName', type: 'xs:string' }, + { name: 'age', type: 'xs:int', minOccurs: 0 }, + { + name: 'email', + type: 'xs:string', + minOccurs: 0, + maxOccurs: 'unbounded' as const, + }, ], }, attribute: [ - { name: "id", type: "xs:string", use: "required" as const }, - { name: "active", type: "xs:boolean" }, + { name: 'id', type: 'xs:string', use: 'required' as const }, + { name: 'active', type: 'xs:boolean' }, ], }, ], @@ -153,50 +167,52 @@ describe('Type Inference with Generated Schemas', () => { it('should infer types from order schema structure', () => { // This schema structure matches what codegen produces from order.xsd const orderSchema = { - targetNamespace: "http://example.com/order", - element: [ - { name: "Order", type: "OrderType" }, - ], + targetNamespace: 'http://example.com/order', + element: [{ name: 'Order', type: 'OrderType' }], complexType: [ { - name: "OrderType", + name: 'OrderType', sequence: { element: [ - { name: "orderId", type: "xs:string" }, - { name: "status", type: "OrderStatusType" }, - { name: "items", type: "ItemListType" }, - { name: "notes", type: "xs:string", minOccurs: 0 }, + { name: 'orderId', type: 'xs:string' }, + { name: 'status', type: 'OrderStatusType' }, + { name: 'items', type: 'ItemListType' }, + { name: 'notes', type: 'xs:string', minOccurs: 0 }, ], }, }, { - name: "ItemListType", + name: 'ItemListType', sequence: { element: [ - { name: "item", type: "ItemType", maxOccurs: "unbounded" as const }, + { + name: 'item', + type: 'ItemType', + maxOccurs: 'unbounded' as const, + }, ], }, }, { - name: "ItemType", + name: 'ItemType', sequence: { element: [ - { name: "sku", type: "xs:string" }, - { name: "name", type: "xs:string" }, - { name: "quantity", type: "xs:int" }, + { name: 'sku', type: 'xs:string' }, + { name: 'name', type: 'xs:string' }, + { name: 'quantity', type: 'xs:int' }, ], }, }, ], simpleType: [ { - name: "OrderStatusType", + name: 'OrderStatusType', restriction: { - base: "xs:string", + base: 'xs:string', enumeration: [ - { value: "pending" }, - { value: "confirmed" }, - { value: "shipped" }, + { value: 'pending' }, + { value: 'confirmed' }, + { value: 'shipped' }, ], }, }, @@ -218,9 +234,7 @@ describe('Type Inference with Generated Schemas', () => { orderId: 'ORD-001', status: 'pending', items: { - item: [ - { sku: 'SKU-001', name: 'Widget', quantity: 5 }, - ], + item: [{ sku: 'SKU-001', name: 'Widget', quantity: 5 }], }, }; diff --git a/packages/ts-xsd/tests/integration/ts-morph.test.ts b/packages/ts-xsd/tests/integration/ts-morph.test.ts index 0556f837..149aeff9 100644 --- a/packages/ts-xsd/tests/integration/ts-morph.test.ts +++ b/packages/ts-xsd/tests/integration/ts-morph.test.ts @@ -101,48 +101,48 @@ describe('ts-morph integration', () => { // Verify import statement assert.ok( code.includes('import { AdtObjectType } from "./adtcore.types"'), - 'Should import AdtObjectType from adtcore.types' + 'Should import AdtObjectType from adtcore.types', ); // Verify AbapClass extends AdtObjectType assert.ok( code.includes('export interface AbapClassType extends AdtObjectType'), - 'AbapClassType should extend AdtObjectType' + 'AbapClassType should extend AdtObjectType', ); // Verify AbapClass properties assert.ok( code.includes('superClass?:'), - 'Should have optional superClass' + 'Should have optional superClass', ); assert.ok( code.includes('interfaces?:'), - 'Should have optional interfaces' + 'Should have optional interfaces', ); assert.ok( code.includes('final?:'), - 'Should have optional final attribute' + 'Should have optional final attribute', ); assert.ok( code.includes('abstract?:'), - 'Should have optional abstract attribute' + 'Should have optional abstract attribute', ); // Verify InterfaceList assert.ok( code.includes('export interface InterfaceListType'), - 'Should have InterfaceListType interface' + 'Should have InterfaceListType interface', ); assert.ok( code.includes('interface: string[]'), - 'InterfaceListType should have interface array' + 'InterfaceListType should have interface array', ); // Verify root type assert.equal(rootTypeName, 'ClassesSchema'); assert.ok( code.includes('export type ClassesSchema'), - 'Should have ClassesSchema root type' + 'Should have ClassesSchema root type', ); }); @@ -174,27 +174,27 @@ describe('ts-morph integration', () => { // So we check for the content properties, not the element wrapper assert.ok( flatCode.includes('name:'), - 'Should have inherited name property' + 'Should have inherited name property', ); assert.ok( flatCode.includes('description?:'), - 'Should have inherited description property' + 'Should have inherited description property', ); assert.ok( flatCode.includes('uri:'), - 'Should have inherited uri property' + 'Should have inherited uri property', ); assert.ok( flatCode.includes('superClass?:'), - 'Should have superClass property' + 'Should have superClass property', ); assert.ok( flatCode.includes('interfaces?:'), - 'Should have interfaces property' + 'Should have interfaces property', ); assert.ok( flatCode.includes('interface:'), - 'Should have nested interface array' + 'Should have nested interface array', ); }); }); @@ -256,34 +256,34 @@ describe('ts-morph integration', () => { // Verify enumeration types assert.ok( code.includes("export type PriorityType = '1' | '2' | '3'"), - 'Should have PriorityType union' + 'Should have PriorityType union', ); assert.ok( code.includes( - "export type MessageKindType = 'error' | 'warning' | 'info'" + "export type MessageKindType = 'error' | 'warning' | 'info'", ), - 'Should have MessageKindType union' + 'Should have MessageKindType union', ); // Verify Finding interface uses enum types assert.ok( code.includes('export interface FindingType'), - 'Should have FindingType interface' + 'Should have FindingType interface', ); // Verify Location interface assert.ok( code.includes('export interface LocationType'), - 'Should have LocationType interface' + 'Should have LocationType interface', ); assert.ok( code.includes('uri: string'), - 'Location should have required uri' + 'Location should have required uri', ); assert.ok(code.includes('line?:'), 'Location should have optional line'); assert.ok( code.includes('column?:'), - 'Location should have optional column' + 'Location should have optional column', ); }); }); @@ -349,19 +349,19 @@ describe('ts-morph integration', () => { // Verify flattened output has no type references assert.ok( !flatCode.includes('PersonType'), - 'Should not reference PersonType' + 'Should not reference PersonType', ); assert.ok( !flatCode.includes('AddressType'), - 'Should not reference AddressType' + 'Should not reference AddressType', ); assert.ok( !flatCode.includes('MetadataType'), - 'Should not reference MetadataType' + 'Should not reference MetadataType', ); assert.ok( !flatCode.includes('RootType'), - 'Should not reference RootType' + 'Should not reference RootType', ); // Verify all properties are inlined diff --git a/packages/ts-xsd/tests/integration/xml-roundtrip.test.ts b/packages/ts-xsd/tests/integration/xml-roundtrip.test.ts index 9d215094..2e6cf96b 100644 --- a/packages/ts-xsd/tests/integration/xml-roundtrip.test.ts +++ b/packages/ts-xsd/tests/integration/xml-roundtrip.test.ts @@ -22,21 +22,19 @@ describe('XML Roundtrip', () => { { name: 'lastName', type: 'xs:string' }, ], }, - attribute: [ - { name: 'id', type: 'xs:string' }, - ], + attribute: [{ name: 'id', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; const original = { id: '123', firstName: 'John', lastName: 'Doe' }; - + // Build XML from data const xml = buildXml(schema, original, { xmlDecl: false }); - + // Parse XML back to data - now returns wrapped format const parsed = parseXml(schema, xml); - + // parse() returns { Person: { ...content } } assert.deepStrictEqual(parsed, { Person: original }); }); @@ -53,9 +51,7 @@ describe('XML Roundtrip', () => { { name: 'total', type: 'xs:decimal' }, ], }, - attribute: [ - { name: 'orderId', type: 'xs:string' }, - ], + attribute: [{ name: 'orderId', type: 'xs:string' }], }, { name: 'CustomerType', @@ -77,10 +73,10 @@ describe('XML Roundtrip', () => { }, total: 99.99, }; - + const xml = buildXml(schema, original, { xmlDecl: false }); const parsed = parseXml(schema, xml); - + assert.deepStrictEqual(parsed, { Order: original }); }); @@ -116,10 +112,10 @@ describe('XML Roundtrip', () => { { sku: 'ITEM-C', quantity: 5, price: 9.99 }, ], }; - + const xml = buildXml(schema, original, { xmlDecl: false }); const parsed = parseXml(schema, xml); - + assert.deepStrictEqual(parsed, { Order: original }); }); @@ -135,9 +131,7 @@ describe('XML Roundtrip', () => { { name: 'age', type: 'xs:int' }, ], }, - attribute: [ - { name: 'id', type: 'xs:string' }, - ], + attribute: [{ name: 'id', type: 'xs:string' }], }, { name: 'EmployeeType', @@ -150,9 +144,7 @@ describe('XML Roundtrip', () => { { name: 'salary', type: 'xs:decimal' }, ], }, - attribute: [ - { name: 'employeeId', type: 'xs:string' }, - ], + attribute: [{ name: 'employeeId', type: 'xs:string' }], }, }, }, @@ -167,10 +159,10 @@ describe('XML Roundtrip', () => { department: 'Engineering', salary: 75000, }; - + const xml = buildXml(schema, original, { xmlDecl: false }); const parsed = parseXml(schema, xml); - + assert.deepStrictEqual(parsed, { Employee: original }); }); @@ -185,22 +177,18 @@ describe('XML Roundtrip', () => { { name: 'OrderType', sequence: { - element: [ - { name: 'description', type: 'xs:string' }, - ], + element: [{ name: 'description', type: 'xs:string' }], }, - attribute: [ - { name: 'id', type: 'xs:string' }, - ], + attribute: [{ name: 'id', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; const original = { id: 'ORD-123', description: 'Test order' }; - + const xml = buildXml(schema, original, { xmlDecl: false }); const parsed = parseXml(schema, xml); - + assert.deepStrictEqual(parsed, { Order: original }); }); @@ -221,10 +209,10 @@ describe('XML Roundtrip', () => { } as const satisfies SchemaLike; const original = { enabled: true, visible: false }; - + const xml = buildXml(schema, original, { xmlDecl: false }); const parsed = parseXml(schema, xml); - + assert.deepStrictEqual(parsed, { Settings: original }); }); @@ -246,10 +234,10 @@ describe('XML Roundtrip', () => { } as const satisfies SchemaLike; const original = { creditCard: '4111-1111-1111-1111' }; - + const xml = buildXml(schema, original, { xmlDecl: false }); const parsed = parseXml(schema, xml); - + assert.deepStrictEqual(parsed, { Payment: original }); }); }); @@ -273,24 +261,24 @@ describe('XML Roundtrip', () => { const original = { value: 'test', count: 42 }; const wrapped = { Data: original }; - + // First roundtrip const xml1 = buildXml(schema, original, { xmlDecl: false }); const parsed1 = parseXml(schema, xml1); - + // Second roundtrip - build accepts wrapped format const xml2 = buildXml(schema, parsed1, { xmlDecl: false }); const parsed2 = parseXml(schema, xml2); - + // Third roundtrip const xml3 = buildXml(schema, parsed2, { xmlDecl: false }); const parsed3 = parseXml(schema, xml3); - + // All should be equal (wrapped format) assert.deepStrictEqual(parsed1, wrapped); assert.deepStrictEqual(parsed2, wrapped); assert.deepStrictEqual(parsed3, wrapped); - + // XML should be identical after first roundtrip assert.strictEqual(xml2, xml1); assert.strictEqual(xml3, xml1); diff --git a/packages/ts-xsd/tests/unit/infer-element.test.ts b/packages/ts-xsd/tests/unit/infer-element.test.ts index 83e20d9f..5280d122 100644 --- a/packages/ts-xsd/tests/unit/infer-element.test.ts +++ b/packages/ts-xsd/tests/unit/infer-element.test.ts @@ -1,20 +1,20 @@ /** * Type inference tests for InferElement with multi-level $imports - * + * * This tests the same pattern as adt-schemas/classes schema: * - AbapClass extends AbapOoObject (in abapoo) * - AbapOoObject extends AbapSourceMainObject (in abapsource) * - AbapSourceMainObject extends AdtMainObject (in adtcore) * - AdtMainObject extends AdtObject (in adtcore) - * + * * NOTE: These are compile-time type tests. If this file compiles without errors, * the tests pass. The runtime tests are just placeholders. */ import { describe, test as it } from 'node:test'; -import type { - InferElement, - InferSchema, - FindByName, +import type { + InferElement, + InferSchema, + FindByName, FindComplexTypeWithSchema, } from '../../src/infer/infer'; @@ -79,7 +79,7 @@ const baseSchema = { // Note: $imports array causes type widening, which is the real-world scenario // ============================================================================= const middleSchema = { - $xmlns: { + $xmlns: { base: 'http://example.com/base', middle: 'http://example.com/middle', }, @@ -144,9 +144,7 @@ const topSchema = { }, { name: 'MyInclude', - attribute: [ - { name: 'includeType', type: 'xsd:string' }, - ], + attribute: [{ name: 'includeType', type: 'xsd:string' }], }, ], } as const; @@ -158,7 +156,7 @@ const topSchema = { describe('InferElement with multi-level $imports', () => { describe('FindByName', () => { it('should find element in tuple array', () => { - type Found = FindByName; + type Found = FindByName<(typeof topSchema)['element'], 'myClass'>; // Should find the element (returns item type for widened arrays) type IsNever = [Found] extends [never] ? true : false; const _check: IsNever = false; // compile error if Found is never @@ -166,7 +164,8 @@ describe('InferElement with multi-level $imports', () => { it('should find element by name in widened array', () => { // Simulate widened array (like when imports cause widening) - const _widenedElements: readonly { name: string; type: string }[] = topSchema.element; + const _widenedElements: readonly { name: string; type: string }[] = + topSchema.element; type Found = FindByName; // Should still find (returns the item type) type IsNever = [Found] extends [never] ? true : false; @@ -213,7 +212,9 @@ describe('InferElement with multi-level $imports', () => { // Own attributes from MyClass type HasFinal = MyClass extends { final?: unknown } ? true : false; type HasAbstract = MyClass extends { abstract?: unknown } ? true : false; - type HasVisibility = MyClass extends { visibility?: unknown } ? true : false; + type HasVisibility = MyClass extends { visibility?: unknown } + ? true + : false; const _f: HasFinal = true; const _a: HasAbstract = true; const _v: HasVisibility = true; @@ -222,7 +223,9 @@ describe('InferElement with multi-level $imports', () => { it('should have inherited attributes from middle layer', () => { type MyClass = InferElement; // Inherited from SourceObject (middle layer) - type HasSourceUri = MyClass extends { sourceUri?: unknown } ? true : false; + type HasSourceUri = MyClass extends { sourceUri?: unknown } + ? true + : false; type HasLanguage = MyClass extends { language?: unknown } ? true : false; const _s: HasSourceUri = true; const _l: HasLanguage = true; @@ -232,7 +235,9 @@ describe('InferElement with multi-level $imports', () => { type MyClass = InferElement; // Inherited from MainObject (base layer) type HasVersion = MyClass extends { version?: unknown } ? true : false; - type HasDescription = MyClass extends { description?: unknown } ? true : false; + type HasDescription = MyClass extends { description?: unknown } + ? true + : false; // Inherited from BaseObject (base layer) type HasId = MyClass extends { id?: unknown } ? true : false; type HasName = MyClass extends { name?: unknown } ? true : false; @@ -245,7 +250,9 @@ describe('InferElement with multi-level $imports', () => { it('should infer simple element without inheritance', () => { type MyInclude = InferElement; type IsNever = [MyInclude] extends [never] ? true : false; - type HasIncludeType = MyInclude extends { includeType?: unknown } ? true : false; + type HasIncludeType = MyInclude extends { includeType?: unknown } + ? true + : false; const _check: IsNever = false; const _inc: HasIncludeType = true; }); @@ -254,14 +261,24 @@ describe('InferElement with multi-level $imports', () => { type MyClass = InferElement; // packageRef is inherited from MainObject (in baseSchema) // Its type is base:PackageReference which should resolve to { uri?, name?, type? } - type HasPackageRef = MyClass extends { packageRef?: unknown } ? true : false; + type HasPackageRef = MyClass extends { packageRef?: unknown } + ? true + : false; const _hasRef: HasPackageRef = true; - + // The packageRef should have the PackageReference type's attributes - type PackageRefType = MyClass extends { packageRef?: infer P } ? P : never; - type PackageRefHasName = PackageRefType extends { name?: unknown } ? true : false; - type PackageRefHasUri = PackageRefType extends { uri?: unknown } ? true : false; - type PackageRefHasType = PackageRefType extends { type?: unknown } ? true : false; + type PackageRefType = MyClass extends { packageRef?: infer P } + ? P + : never; + type PackageRefHasName = PackageRefType extends { name?: unknown } + ? true + : false; + type PackageRefHasUri = PackageRefType extends { uri?: unknown } + ? true + : false; + type PackageRefHasType = PackageRefType extends { type?: unknown } + ? true + : false; const _refHasName: PackageRefHasName = true; const _refHasUri: PackageRefHasUri = true; const _refHasType: PackageRefHasType = true; @@ -272,16 +289,24 @@ describe('InferElement with multi-level $imports', () => { // include is an array (maxOccurs: unbounded) of IncludeItem from baseSchema type HasInclude = MyClass extends { include?: unknown } ? true : false; const _hasInclude: HasInclude = true; - + // include should be an array type IncludeType = MyClass extends { include?: infer I } ? I : never; type IncludeIsArray = IncludeType extends unknown[] ? true : false; const _includeIsArray: IncludeIsArray = true; - + // Array elements should have IncludeItem's attributes type IncludeItemType = IncludeType extends (infer Item)[] ? Item : never; - type IncludeItemHasIncludeType = IncludeItemType extends { includeType?: unknown } ? true : false; - type IncludeItemHasSourceUri = IncludeItemType extends { sourceUri?: unknown } ? true : false; + type IncludeItemHasIncludeType = IncludeItemType extends { + includeType?: unknown; + } + ? true + : false; + type IncludeItemHasSourceUri = IncludeItemType extends { + sourceUri?: unknown; + } + ? true + : false; const _itemHasIncludeType: IncludeItemHasIncludeType = true; const _itemHasSourceUri: IncludeItemHasSourceUri = true; }); @@ -298,14 +323,24 @@ describe('InferElement with multi-level $imports', () => { describe('Deep inheritance (4+ levels)', () => { // Reproduces "Type instantiation is excessively deep" error // This mimics real-world schemas like classes -> abapoo -> abapsource -> adtcore - + const l1 = { $xmlns: { l1: 'http://l1' }, targetNamespace: 'http://l1', complexType: [ { name: 'Base', attribute: [{ name: 'id', type: 'xsd:string' }] }, { name: 'Ref', attribute: [{ name: 'uri', type: 'xsd:string' }] }, - { name: 'L1Obj', complexContent: { extension: { base: 'Base', sequence: { element: [{ name: 'ref', type: 'l1:Ref', minOccurs: '0' }] } } } }, + { + name: 'L1Obj', + complexContent: { + extension: { + base: 'Base', + sequence: { + element: [{ name: 'ref', type: 'l1:Ref', minOccurs: '0' }], + }, + }, + }, + }, ], } as const; @@ -313,7 +348,17 @@ describe('InferElement with multi-level $imports', () => { $xmlns: { l1: 'http://l1', l2: 'http://l2' }, $imports: [l1], targetNamespace: 'http://l2', - complexType: [{ name: 'L2Obj', complexContent: { extension: { base: 'l1:L1Obj', attribute: [{ name: 'l2a', type: 'xsd:string' }] } } }], + complexType: [ + { + name: 'L2Obj', + complexContent: { + extension: { + base: 'l1:L1Obj', + attribute: [{ name: 'l2a', type: 'xsd:string' }], + }, + }, + }, + ], } as const; const l3 = { @@ -322,23 +367,47 @@ describe('InferElement with multi-level $imports', () => { targetNamespace: 'http://l3', complexType: [ { name: 'Item', attribute: [{ name: 'itemType', type: 'xsd:string' }] }, - { name: 'L3Obj', complexContent: { extension: { base: 'l2:L2Obj', sequence: { element: [{ name: 'items', type: 'l3:Item', minOccurs: '0', maxOccurs: 'unbounded' }] } } } }, + { + name: 'L3Obj', + complexContent: { + extension: { + base: 'l2:L2Obj', + sequence: { + element: [ + { + name: 'items', + type: 'l3:Item', + minOccurs: '0', + maxOccurs: 'unbounded', + }, + ], + }, + }, + }, + }, ], } as const; const _l4 = { - $xmlns: { l1: 'http://l1', l2: 'http://l2', l3: 'http://l3', l4: 'http://l4' }, + $xmlns: { + l1: 'http://l1', + l2: 'http://l2', + l3: 'http://l3', + l4: 'http://l4', + }, $imports: [l1, l2, l3], targetNamespace: 'http://l4', element: [{ name: 'obj', type: 'l4:L4Obj' }], - complexType: [{ name: 'L4Obj', complexContent: { extension: { base: 'l3:L3Obj' } } }], + complexType: [ + { name: 'L4Obj', complexContent: { extension: { base: 'l3:L3Obj' } } }, + ], } as const; it('should infer element with 4 levels of inheritance', () => { type Obj = InferElement; type IsNever = [Obj] extends [never] ? true : false; const _check: IsNever = false; - + // Should have inherited properties type HasId = Obj extends { id?: unknown } ? true : false; type HasItems = Obj extends { items?: unknown } ? true : false; @@ -348,12 +417,12 @@ describe('InferElement with multi-level $imports', () => { it('should document recursion limit workaround for array access', () => { type Obj = InferElement; - + // KNOWN LIMITATION: Deep schema inheritance (4+ levels) causes TS2589 // "Type instantiation is excessively deep and possibly infinite" // when accessing array element properties inline: // data.items?.map((item) => item.itemType) // ERROR! - + // WORKAROUND 1: Use 'unknown' type annotation with type guard function _testWithUnknown(data: Obj) { const types = data.items?.map((item: unknown) => { @@ -364,7 +433,7 @@ describe('InferElement with multi-level $imports', () => { }); return types; } - + // WORKAROUND 2: Define interface manually based on schema interface ItemType { itemType?: string; @@ -373,7 +442,7 @@ describe('InferElement with multi-level $imports', () => { const types = data.items?.map((item: ItemType) => item.itemType); return types; } - + // Type-level check that items is an array (this works) type ItemsType = Obj extends { items?: infer I } ? I : never; type ItemsIsArray = ItemsType extends unknown[] ? true : false; @@ -396,7 +465,9 @@ type _HasAbstract = _MyClass extends { abstract?: unknown } ? true : false; type _HasSourceUri = _MyClass extends { sourceUri?: unknown } ? true : false; type _HasVersion = _MyClass extends { version?: unknown } ? true : false; type _HasId = _MyClass extends { id?: unknown } ? true : false; -type _HasIncludeType = _MyInclude extends { includeType?: unknown } ? true : false; +type _HasIncludeType = _MyInclude extends { includeType?: unknown } + ? true + : false; // Static assertions - these lines will cause compile errors if types are wrong const _assertHasFinal: _HasFinal = true; diff --git a/packages/ts-xsd/tests/unit/interface-generator.test.ts b/packages/ts-xsd/tests/unit/interface-generator.test.ts index 9d3c1e7f..29816113 100644 --- a/packages/ts-xsd/tests/unit/interface-generator.test.ts +++ b/packages/ts-xsd/tests/unit/interface-generator.test.ts @@ -8,9 +8,7 @@ describe('Interface Generator', () => { const simpleSchema = { $xmlns: { ns: 'http://example.com' }, targetNamespace: 'http://example.com', - element: [ - { name: 'person', type: 'ns:Person' }, - ], + element: [{ name: 'person', type: 'ns:Person' }], complexType: [ { name: 'Person', @@ -23,10 +21,11 @@ describe('Interface Generator', () => { } as const; it('should generate interface for simple complex type', () => { - const { code: output } = generateInterfaces(simpleSchema as unknown as Schema, { - - }); - + const { code: output } = generateInterfaces( + simpleSchema as unknown as Schema, + {}, + ); + assert.ok(output.includes('export interface Person')); assert.ok(output.includes('id?: string')); assert.ok(output.includes('age?: number')); @@ -36,24 +35,18 @@ describe('Interface Generator', () => { const inheritanceSchema = { $xmlns: { ns: 'http://example.com' }, targetNamespace: 'http://example.com', - element: [ - { name: 'employee', type: 'ns:Employee' }, - ], + element: [{ name: 'employee', type: 'ns:Employee' }], complexType: [ { name: 'Person', - attribute: [ - { name: 'name', type: 'xsd:string' }, - ], + attribute: [{ name: 'name', type: 'xsd:string' }], }, { name: 'Employee', complexContent: { extension: { base: 'Person', - attribute: [ - { name: 'role', type: 'xsd:string' }, - ], + attribute: [{ name: 'role', type: 'xsd:string' }], }, }, }, @@ -63,13 +56,20 @@ describe('Interface Generator', () => { it('should generate interface with extends clause', () => { // NOTE: The simplified generator flattens inheritance instead of using extends. // This produces simpler, self-contained interfaces. - const { code: output } = generateInterfaces(inheritanceSchema as unknown as Schema, { - - }); - + const { code: output } = generateInterfaces( + inheritanceSchema as unknown as Schema, + {}, + ); + // Employee should have all properties flattened (name from Person + role) - assert.ok(output.includes('export interface EmployeeType'), 'Should have EmployeeType'); - assert.ok(output.includes('name?: string'), 'Should have name (from Person)'); + assert.ok( + output.includes('export interface EmployeeType'), + 'Should have EmployeeType', + ); + assert.ok( + output.includes('name?: string'), + 'Should have name (from Person)', + ); assert.ok(output.includes('role?: string'), 'Should have role'); }); @@ -77,9 +77,7 @@ describe('Interface Generator', () => { const nestedSchema = { $xmlns: { ns: 'http://example.com' }, targetNamespace: 'http://example.com', - element: [ - { name: 'order', type: 'ns:Order' }, - ], + element: [{ name: 'order', type: 'ns:Order' }], complexType: [ { name: 'Item', @@ -92,26 +90,40 @@ describe('Interface Generator', () => { name: 'Order', sequence: { element: [ - { name: 'items', type: 'ns:Item', minOccurs: '0', maxOccurs: 'unbounded' }, + { + name: 'items', + type: 'ns:Item', + minOccurs: '0', + maxOccurs: 'unbounded', + }, { name: 'note', type: 'xsd:string', minOccurs: '0' }, ], }, - attribute: [ - { name: 'orderId', type: 'xsd:string', use: 'required' }, - ], + attribute: [{ name: 'orderId', type: 'xsd:string', use: 'required' }], }, ], } as const; it('should generate interface with array types', () => { - const { code: output } = generateInterfaces(nestedSchema as unknown as Schema); - + const { code: output } = generateInterfaces( + nestedSchema as unknown as Schema, + ); + // New generator adds 'Type' suffix to interface names - assert.ok(output.includes('export interface ItemType'), 'Should have ItemType'); - assert.ok(output.includes('export interface OrderType'), 'Should have OrderType'); + assert.ok( + output.includes('export interface ItemType'), + 'Should have ItemType', + ); + assert.ok( + output.includes('export interface OrderType'), + 'Should have OrderType', + ); assert.ok(output.includes('items?: ItemType[]'), 'Should have items array'); assert.ok(output.includes('note?: string'), 'Should have note'); - assert.ok(output.includes('orderId: string'), 'Should have required orderId'); + assert.ok( + output.includes('orderId: string'), + 'Should have required orderId', + ); }); // Deep inheritance (4 levels) - the case that breaks TS type inference @@ -122,40 +134,91 @@ describe('Interface Generator', () => { // For deep inheritance, use resolveSchema to merge schemas first. // This test now uses a merged schema with all types flattened. const mergedDeepSchema = { - $xmlns: { l1: 'http://l1', l2: 'http://l2', l3: 'http://l3', l4: 'http://l4' }, + $xmlns: { + l1: 'http://l1', + l2: 'http://l2', + l3: 'http://l3', + l4: 'http://l4', + }, targetNamespace: 'http://l4', - element: [ - { name: 'obj', type: 'l4:L4Obj' }, - ], + element: [{ name: 'obj', type: 'l4:L4Obj' }], complexType: [ { name: 'L1Base', attribute: [{ name: 'id', type: 'xsd:string' }] }, - { name: 'L2Obj', complexContent: { extension: { base: 'l1:L1Base', attribute: [{ name: 'l2a', type: 'xsd:string' }] } } }, + { + name: 'L2Obj', + complexContent: { + extension: { + base: 'l1:L1Base', + attribute: [{ name: 'l2a', type: 'xsd:string' }], + }, + }, + }, { name: 'Item', attribute: [{ name: 'itemType', type: 'xsd:string' }] }, - { name: 'L3Obj', complexContent: { extension: { base: 'l2:L2Obj', sequence: { element: [{ name: 'items', type: 'l3:Item', minOccurs: '0', maxOccurs: 'unbounded' }] } } } }, - { name: 'L4Obj', complexContent: { extension: { base: 'l3:L3Obj', attribute: [{ name: 'l4a', type: 'xsd:string' }] } } }, + { + name: 'L3Obj', + complexContent: { + extension: { + base: 'l2:L2Obj', + sequence: { + element: [ + { + name: 'items', + type: 'l3:Item', + minOccurs: '0', + maxOccurs: 'unbounded', + }, + ], + }, + }, + }, + }, + { + name: 'L4Obj', + complexContent: { + extension: { + base: 'l3:L3Obj', + attribute: [{ name: 'l4a', type: 'xsd:string' }], + }, + }, + }, ], } as const; - const { code: output } = generateInterfaces(mergedDeepSchema as unknown as Schema); - + const { code: output } = generateInterfaces( + mergedDeepSchema as unknown as Schema, + ); + // The simplified generator flattens inheritance // L4Obj should have all properties from all levels - assert.ok(output.includes('export interface L4ObjType'), 'Should have L4ObjType'); + assert.ok( + output.includes('export interface L4ObjType'), + 'Should have L4ObjType', + ); assert.ok(output.includes('id?: string'), 'Should have id (from L1Base)'); assert.ok(output.includes('l2a?: string'), 'Should have l2a (from L2Obj)'); - assert.ok(output.includes('items?: ItemType[]'), 'Should have items array (from L3Obj)'); + assert.ok( + output.includes('items?: ItemType[]'), + 'Should have items array (from L3Obj)', + ); assert.ok(output.includes('l4a?: string'), 'Should have l4a'); - + // Item type should be generated - assert.ok(output.includes('export interface ItemType'), 'Should have ItemType'); - assert.ok(output.includes('itemType?: string'), 'ItemType should have itemType'); + assert.ok( + output.includes('export interface ItemType'), + 'Should have ItemType', + ); + assert.ok( + output.includes('itemType?: string'), + 'ItemType should have itemType', + ); }); it('should generate all types when generateAllTypes is true', () => { - const { code: output } = generateInterfaces(simpleSchema as unknown as Schema, { - - }); - + const { code: output } = generateInterfaces( + simpleSchema as unknown as Schema, + {}, + ); + assert.ok(output.includes('export interface Person')); }); @@ -163,9 +226,7 @@ describe('Interface Generator', () => { const enumSchema = { $xmlns: { ns: 'http://example.com' }, targetNamespace: 'http://example.com', - element: [ - { name: 'status', type: 'ns:StatusType' }, - ], + element: [{ name: 'status', type: 'ns:StatusType' }], simpleType: [ { name: 'StatusType', @@ -182,20 +243,27 @@ describe('Interface Generator', () => { complexType: [ { name: 'Item', - attribute: [ - { name: 'status', type: 'ns:StatusType' }, - ], + attribute: [{ name: 'status', type: 'ns:StatusType' }], }, ], } as const; it('should generate type alias for simpleType enum', () => { - const { code: output } = generateInterfaces(enumSchema as unknown as Schema, { - - }); - - assert.ok(output.includes("export type StatusType = 'active' | 'inactive' | 'pending'"), 'Should have enum type'); - assert.ok(output.includes('export interface Item'), 'Should have Item interface'); + const { code: output } = generateInterfaces( + enumSchema as unknown as Schema, + {}, + ); + + assert.ok( + output.includes( + "export type StatusType = 'active' | 'inactive' | 'pending'", + ), + 'Should have enum type', + ); + assert.ok( + output.includes('export interface Item'), + 'Should have Item interface', + ); assert.ok(output.includes('status?: StatusType'), 'Should use StatusType'); }); @@ -203,9 +271,7 @@ describe('Interface Generator', () => { const simpleContentSchema = { $xmlns: { ns: 'http://example.com' }, targetNamespace: 'http://example.com', - element: [ - { name: 'price', type: 'ns:PriceType' }, - ], + element: [{ name: 'price', type: 'ns:PriceType' }], complexType: [ { name: 'PriceType', @@ -221,13 +287,24 @@ describe('Interface Generator', () => { ], } as const; - it('should generate interface for simpleContent with _text', () => { - // NOTE: The simplified generator uses _text instead of $value for simpleContent - const { code: output } = generateInterfaces(simpleContentSchema as unknown as Schema); - - assert.ok(output.includes('export interface PriceType'), 'Should have PriceType'); - assert.ok(output.includes('_text?: number'), 'Should have _text for text content'); - assert.ok(output.includes('currency: string'), 'Should have currency attribute'); + it('should generate interface for simpleContent with $value', () => { + // NOTE: simpleContent text uses $value to match the XML parser output + const { code: output } = generateInterfaces( + simpleContentSchema as unknown as Schema, + ); + + assert.ok( + output.includes('export interface PriceType'), + 'Should have PriceType', + ); + assert.ok( + output.includes('$value?: number'), + 'Should have $value for text content', + ); + assert.ok( + output.includes('currency: string'), + 'Should have currency attribute', + ); }); // Schema with include - for the new generator, we merge schemas first @@ -235,9 +312,7 @@ describe('Interface Generator', () => { const mergedIncludeSchema = { $xmlns: { base: 'http://base', main: 'http://main' }, targetNamespace: 'http://main', - element: [ - { name: 'item', type: 'main:ItemType' }, - ], + element: [{ name: 'item', type: 'main:ItemType' }], complexType: [ // BaseType from included schema { name: 'BaseType', attribute: [{ name: 'id', type: 'xsd:string' }] }, @@ -257,11 +332,19 @@ describe('Interface Generator', () => { it('should resolve types from include schemas', () => { // NOTE: The simplified generator flattens inheritance instead of using extends. // This is by design - it produces simpler, self-contained interfaces. - const { code: output } = generateInterfaces(mergedIncludeSchema as unknown as Schema); - + const { code: output } = generateInterfaces( + mergedIncludeSchema as unknown as Schema, + ); + // ItemType should have all properties (flattened from BaseType) - assert.ok(output.includes('export interface ItemType'), 'Should have ItemType'); - assert.ok(output.includes('id?: string'), 'ItemType should have id (from BaseType)'); + assert.ok( + output.includes('export interface ItemType'), + 'Should have ItemType', + ); + assert.ok( + output.includes('id?: string'), + 'ItemType should have id (from BaseType)', + ); assert.ok(output.includes('name?: string'), 'ItemType should have name'); }); @@ -293,12 +376,23 @@ describe('Interface Generator', () => { } as const; it('should resolve group references', () => { - const { code: output } = generateInterfaces(groupSchema as unknown as Schema); - - assert.ok(output.includes('export interface ItemType'), 'Should have ItemType'); + const { code: output } = generateInterfaces( + groupSchema as unknown as Schema, + ); + + assert.ok( + output.includes('export interface ItemType'), + 'Should have ItemType', + ); assert.ok(output.includes('name: string'), 'Should have name'); - assert.ok(output.includes('createdAt: string'), 'Should have createdAt from group'); - assert.ok(output.includes('updatedAt: string'), 'Should have updatedAt from group'); + assert.ok( + output.includes('createdAt: string'), + 'Should have createdAt from group', + ); + assert.ok( + output.includes('updatedAt: string'), + 'Should have updatedAt from group', + ); }); // Schema with any element @@ -319,10 +413,16 @@ describe('Interface Generator', () => { it('should handle any wildcard element', () => { const { code: output } = generateInterfaces(anySchema as unknown as Schema); - - assert.ok(output.includes('export interface ContainerType'), 'Should have ContainerType'); + + assert.ok( + output.includes('export interface ContainerType'), + 'Should have ContainerType', + ); assert.ok(output.includes('header: string'), 'Should have header'); - assert.ok(output.includes('[key: string]: unknown'), 'Should have index signature for any'); + assert.ok( + output.includes('[key: string]: unknown'), + 'Should have index signature for any', + ); }); // BUG: Element reference should use the element's type, not derive type from element name @@ -335,18 +435,18 @@ describe('Interface Generator', () => { // Schema where element has explicit type different from element name // For the new generator, we merge all schemas into one flat schema const mergedSchema = { - $xmlns: { + $xmlns: { base: 'http://base.example.com', container: 'http://container.example.com', }, targetNamespace: 'http://container.example.com', element: [ - { name: 'templateLink', type: 'base:LinkType' }, // From base schema + { name: 'templateLink', type: 'base:LinkType' }, // From base schema { name: 'container', type: 'container:ContainerType' }, ], complexType: [ { - name: 'LinkType', // From base schema + name: 'LinkType', // From base schema attribute: [ { name: 'href', type: 'xsd:string', use: 'required' }, { name: 'rel', type: 'xsd:string' }, @@ -356,7 +456,11 @@ describe('Interface Generator', () => { name: 'ContainerType', sequence: { element: [ - { ref: 'base:templateLink', minOccurs: '0', maxOccurs: 'unbounded' }, + { + ref: 'base:templateLink', + minOccurs: '0', + maxOccurs: 'unbounded', + }, ], }, }, @@ -364,57 +468,63 @@ describe('Interface Generator', () => { } as const; it('should use element type (LinkType), not element name (TemplateLink)', () => { - const { code: output } = generateInterfaces(mergedSchema as unknown as Schema); - + const { code: output } = generateInterfaces( + mergedSchema as unknown as Schema, + ); + // Should generate LinkType interface - assert.ok(output.includes('export interface LinkType'), 'Should have LinkType interface'); + assert.ok( + output.includes('export interface LinkType'), + 'Should have LinkType interface', + ); assert.ok(output.includes('href: string'), 'LinkType should have href'); assert.ok(output.includes('rel?: string'), 'LinkType should have rel'); - + // Property should reference LinkType, NOT TemplateLink assert.ok( output.includes('templateLink?: LinkType[]'), - 'Property should use LinkType (the actual type), not TemplateLink (derived from element name)' + 'Property should use LinkType (the actual type), not TemplateLink (derived from element name)', ); - + // Should NOT generate a "TemplateLink" type - that would be wrong assert.ok( !output.includes('export interface TemplateLink'), - 'Should NOT generate TemplateLink interface - type should be LinkType' + 'Should NOT generate TemplateLink interface - type should be LinkType', ); }); // Additional test: non-W3C attributes like ecore:name should be ignored const schemaWithEcoreName = { - $xmlns: { ns: 'http://example.com', ecore: 'http://www.eclipse.org/emf/2002/Ecore' }, + $xmlns: { + ns: 'http://example.com', + ecore: 'http://www.eclipse.org/emf/2002/Ecore', + }, targetNamespace: 'http://example.com', - element: [ - { name: 'item', type: 'ns:ItemType' }, - ], + element: [{ name: 'item', type: 'ns:ItemType' }], complexType: [ { name: 'ItemType', // ecore:name is an Eclipse EMF annotation, NOT part of W3C XSD spec // It should be completely ignored - type name comes from 'name' attribute only - 'ecore:name': 'EcoreItemType', // This should be IGNORED - attribute: [ - { name: 'id', type: 'xsd:string' }, - ], + 'ecore:name': 'EcoreItemType', // This should be IGNORED + attribute: [{ name: 'id', type: 'xsd:string' }], }, ], } as const; it('should ignore ecore:name and use W3C name attribute only', () => { - const { code: output } = generateInterfaces(schemaWithEcoreName as unknown as Schema); - + const { code: output } = generateInterfaces( + schemaWithEcoreName as unknown as Schema, + ); + // Should use 'name' attribute (ItemType), not 'ecore:name' (EcoreItemType) assert.ok( output.includes('export interface ItemType'), - 'Should use W3C name attribute (ItemType)' + 'Should use W3C name attribute (ItemType)', ); assert.ok( !output.includes('EcoreItemType'), - 'Should NOT use ecore:name (EcoreItemType) - it is not part of W3C XSD spec' + 'Should NOT use ecore:name (EcoreItemType) - it is not part of W3C XSD spec', ); }); }); diff --git a/packages/ts-xsd/tests/unit/resolve-includes.test.ts b/packages/ts-xsd/tests/unit/resolve-includes.test.ts index f9a04472..67bb0394 100644 --- a/packages/ts-xsd/tests/unit/resolve-includes.test.ts +++ b/packages/ts-xsd/tests/unit/resolve-includes.test.ts @@ -10,10 +10,16 @@ describe('resolveSchema with $includes', () => { // Schema with $includes (simulating xs:include - same namespace) const includedSchema = { element: [ - { name: 'abapGit', complexType: { attribute: [{ name: 'version', type: 'xs:string' }] } }, + { + name: 'abapGit', + complexType: { attribute: [{ name: 'version', type: 'xs:string' }] }, + }, ], complexType: [ - { name: 'IncludedType', sequence: { element: [{ name: 'field1', type: 'xs:string' }] } }, + { + name: 'IncludedType', + sequence: { element: [{ name: 'field1', type: 'xs:string' }] }, + }, ], } as const; @@ -24,60 +30,122 @@ describe('resolveSchema with $includes', () => { { name: 'Schema', abstract: true }, ], complexType: [ - { name: 'AbapType', sequence: { element: [{ name: 'values', type: 'ValuesType' }] } }, - { name: 'ValuesType', sequence: { element: [{ name: 'DATA', type: 'xs:string', minOccurs: '0', maxOccurs: 'unbounded' }] } }, + { + name: 'AbapType', + sequence: { element: [{ name: 'values', type: 'ValuesType' }] }, + }, + { + name: 'ValuesType', + sequence: { + element: [ + { + name: 'DATA', + type: 'xs:string', + minOccurs: '0', + maxOccurs: 'unbounded', + }, + ], + }, + }, ], } as const; const mainSchema = { - $includes: [includedSchema], // xs:include - same namespace - $imports: [importedSchema], // xs:import - different namespace + $includes: [includedSchema], // xs:include - same namespace + $imports: [importedSchema], // xs:import - different namespace element: [ - { name: 'VSEOINTERF', type: 'VseoInterfType', substitutionGroup: 'asx:Schema' }, + { + name: 'VSEOINTERF', + type: 'VseoInterfType', + substitutionGroup: 'asx:Schema', + }, ], complexType: [ - { name: 'VseoInterfType', all: { element: [{ name: 'CLSNAME', type: 'xs:string' }] } }, + { + name: 'VseoInterfType', + all: { element: [{ name: 'CLSNAME', type: 'xs:string' }] }, + }, ], } as const; it('should include elements from $includes in resolved schema', () => { const resolved = resolveSchema(mainSchema as unknown as Schema); - const elementNames = (resolved.element as Array<{ name?: string }>)?.map(e => e.name) ?? []; - + const elementNames = + (resolved.element as Array<{ name?: string }>)?.map((e) => e.name) ?? []; + assert.ok(elementNames.includes('VSEOINTERF'), 'Should have VSEOINTERF'); - assert.ok(elementNames.includes('abapGit'), 'Should have abapGit from $includes'); + assert.ok( + elementNames.includes('abapGit'), + 'Should have abapGit from $includes', + ); assert.ok(elementNames.includes('abap'), 'Should have abap from $imports'); }); it('should include complexTypes from $includes in resolved schema', () => { const resolved = resolveSchema(mainSchema as unknown as Schema); - const typeNames = (resolved.complexType as Array<{ name?: string }>)?.map(ct => ct.name) ?? []; - - assert.ok(typeNames.includes('VseoInterfType'), 'Should have VseoInterfType'); - assert.ok(typeNames.includes('IncludedType'), 'Should have IncludedType from $includes'); - assert.ok(typeNames.includes('AbapType'), 'Should have AbapType from $imports'); + const typeNames = + (resolved.complexType as Array<{ name?: string }>)?.map( + (ct) => ct.name, + ) ?? []; + + assert.ok( + typeNames.includes('VseoInterfType'), + 'Should have VseoInterfType', + ); + assert.ok( + typeNames.includes('IncludedType'), + 'Should have IncludedType from $includes', + ); + assert.ok( + typeNames.includes('AbapType'), + 'Should have AbapType from $imports', + ); }); it('should handle nested $includes', () => { const nestedInclude = { - complexType: [{ name: 'NestedType', sequence: { element: [{ name: 'nested', type: 'xs:string' }] } }], + complexType: [ + { + name: 'NestedType', + sequence: { element: [{ name: 'nested', type: 'xs:string' }] }, + }, + ], } as const; const firstInclude = { $includes: [nestedInclude], - complexType: [{ name: 'FirstType', sequence: { element: [{ name: 'first', type: 'xs:string' }] } }], + complexType: [ + { + name: 'FirstType', + sequence: { element: [{ name: 'first', type: 'xs:string' }] }, + }, + ], } as const; const schema = { $includes: [firstInclude], - complexType: [{ name: 'MainType', sequence: { element: [{ name: 'main', type: 'xs:string' }] } }], + complexType: [ + { + name: 'MainType', + sequence: { element: [{ name: 'main', type: 'xs:string' }] }, + }, + ], } as const; const resolved = resolveSchema(schema as unknown as Schema); - const typeNames = (resolved.complexType as Array<{ name?: string }>)?.map(ct => ct.name) ?? []; - + const typeNames = + (resolved.complexType as Array<{ name?: string }>)?.map( + (ct) => ct.name, + ) ?? []; + assert.ok(typeNames.includes('MainType'), 'Should have MainType'); - assert.ok(typeNames.includes('FirstType'), 'Should have FirstType from first $includes'); - assert.ok(typeNames.includes('NestedType'), 'Should have NestedType from nested $includes'); + assert.ok( + typeNames.includes('FirstType'), + 'Should have FirstType from first $includes', + ); + assert.ok( + typeNames.includes('NestedType'), + 'Should have NestedType from nested $includes', + ); }); }); diff --git a/packages/ts-xsd/tests/unit/ts-morph.test.ts b/packages/ts-xsd/tests/unit/ts-morph.test.ts index 16a86f2c..002e77d2 100644 --- a/packages/ts-xsd/tests/unit/ts-morph.test.ts +++ b/packages/ts-xsd/tests/unit/ts-morph.test.ts @@ -26,7 +26,7 @@ describe('codegen/ts-morph', () => { it('handles path in filename', () => { assert.equal( deriveRootTypeName('path/to/discovery.xsd'), - 'DiscoverySchema' + 'DiscoverySchema', ); }); @@ -115,7 +115,9 @@ describe('codegen/ts-morph', () => { assert.ok(code.includes('export type TestSchema')); // Root type is now wrapped with element name (matches parse() behavior) // Element name is 'person' (lowercase) as defined in schema - assert.ok(code.includes('export type TestSchema = { person: PersonType }')); + assert.ok( + code.includes('export type TestSchema = { person: PersonType }'), + ); }); it('handles optional elements (minOccurs=0)', () => { @@ -327,7 +329,9 @@ describe('codegen/ts-morph', () => { assert.ok(code.includes('export type TestSchema')); // Root type is now wrapped with element name (matches parse() behavior) // Element name is 'person' (lowercase) as defined in schema - assert.ok(code.includes('export type TestSchema = { person: PersonType }')); + assert.ok( + code.includes('export type TestSchema = { person: PersonType }'), + ); }); it('generates flattened type with flatten: true', () => { @@ -404,11 +408,11 @@ describe('codegen/ts-morph', () => { // Should have both own and inherited properties inlined assert.ok( code.includes('id: string'), - 'Should have inherited id property' + 'Should have inherited id property', ); assert.ok( code.includes('extra: string'), - 'Should have own extra property' + 'Should have own extra property', ); }); }); diff --git a/packages/ts-xsd/tests/unit/type-parse-consistency.test.ts b/packages/ts-xsd/tests/unit/type-parse-consistency.test.ts index b2d88554..14708816 100644 --- a/packages/ts-xsd/tests/unit/type-parse-consistency.test.ts +++ b/packages/ts-xsd/tests/unit/type-parse-consistency.test.ts @@ -1,10 +1,10 @@ /** * Test to verify that generated types match parse() behavior - * + * * Both parse() and generated types wrap content with root element name: * - parse(): returns { elementName: { ...content } } * - Generated types: { elementName: Type } - * + * * This enables type discrimination for multi-root schemas. */ @@ -38,7 +38,7 @@ describe('Type and Parse Consistency', () => { describe('Consistent behavior (wrapped)', () => { it('parse() returns content WITH element wrapper', () => { const result = parseXml(personSchema, personXml); - + // parse() returns { person: { name: 'John', age: 30 } } // Wrapped with element name for type discrimination assert.deepStrictEqual(result, { person: { name: 'John', age: 30 } }); @@ -46,24 +46,28 @@ describe('Type and Parse Consistency', () => { }); it('generated type wraps with element name (matches parse)', () => { - const { sourceFile } = schemaToSourceFile(personSchema as unknown as Schema); + const { sourceFile } = schemaToSourceFile( + personSchema as unknown as Schema, + ); const code = sourceFile.getFullText(); - + // Generated type is: { person: PersonType } assert.ok( code.includes('person: PersonType'), - 'Generated type should wrap with element name' + 'Generated type should wrap with element name', ); }); it('PROVES CONSISTENCY: parse result matches generated type structure', () => { const parsed = parseXml(personSchema, personXml); - const { sourceFile } = schemaToSourceFile(personSchema as unknown as Schema); + const { sourceFile } = schemaToSourceFile( + personSchema as unknown as Schema, + ); const code = sourceFile.getFullText(); // parse() returns: { person: { name: 'John', age: 30 } } // Generated type is: { person: PersonType } - + // Both have 'person' at root level - CONSISTENT! assert.ok('person' in parsed, 'parsed has person wrapper'); assert.ok(code.includes('person: PersonType'), 'type has person wrapper'); @@ -75,8 +79,12 @@ describe('Type and Parse Consistency', () => { const parsed1 = parseXml(personSchema, personXml); const built = buildXml(personSchema, parsed1); const parsed2 = parseXml(personSchema, built); - - assert.deepStrictEqual(parsed1, parsed2, 'Roundtrip should preserve data'); + + assert.deepStrictEqual( + parsed1, + parsed2, + 'Roundtrip should preserve data', + ); }); }); @@ -106,23 +114,25 @@ describe('Type and Parse Consistency', () => { it('parse() returns wrapped content for type discrimination', () => { const personXml = `John`; const companyXml = `Acme`; - + const parsedPerson = parseXml(multiRootSchema, personXml); const parsedCompany = parseXml(multiRootSchema, companyXml); - + // Both return wrapped content for type discrimination assert.deepStrictEqual(parsedPerson, { person: { name: 'John' } }); assert.deepStrictEqual(parsedCompany, { company: { title: 'Acme' } }); - + // Each has its element name as wrapper assert.ok('person' in parsedPerson); assert.ok('company' in parsedCompany); }); it('generated type is union of wrapped elements', () => { - const { sourceFile } = schemaToSourceFile(multiRootSchema as unknown as Schema); + const { sourceFile } = schemaToSourceFile( + multiRootSchema as unknown as Schema, + ); const code = sourceFile.getFullText(); - + // Generated root type is union: { person: PersonType } | { company: CompanyType } assert.ok(code.includes('export type MultiSchema')); assert.ok(code.includes('person: PersonType'), 'has person wrapper'); diff --git a/packages/ts-xsd/tests/unit/walker-attribute-ref.test.ts b/packages/ts-xsd/tests/unit/walker-attribute-ref.test.ts index e1387690..67a8f4c6 100644 --- a/packages/ts-xsd/tests/unit/walker-attribute-ref.test.ts +++ b/packages/ts-xsd/tests/unit/walker-attribute-ref.test.ts @@ -1,9 +1,9 @@ /** * Tests for walkAttributes with attribute references (ref) - * + * * This test covers the fix for parsing namespaced attribute references * like `ref="atcfinding:checkId"` which are used in SAP ADT schemas. - * + * * @see https://www.w3.org/TR/xmlschema11-1/#Attribute_Declaration_details */ @@ -16,15 +16,15 @@ describe('walkAttributes with attribute references', () => { it('should resolve attribute ref from same schema', () => { // Schema with top-level attribute and complexType using ref const schema = { - attribute: [ - { name: 'checkId', type: 'xs:string' }, + attribute: [{ name: 'checkId', type: 'xs:string' }], + complexType: [ + { + name: 'Finding', + attribute: [ + { ref: 'checkId' }, // Reference without namespace prefix + ], + }, ], - complexType: [{ - name: 'Finding', - attribute: [ - { ref: 'checkId' }, // Reference without namespace prefix - ], - }], } as const; const ct = schema.complexType[0] as ComplexTypeLike; @@ -49,46 +49,48 @@ describe('walkAttributes with attribute references', () => { // Main schema importing and using refs const schema = { $imports: [importedSchema], - complexType: [{ - name: 'AtcFinding', - attribute: [ - { ref: 'atcfinding:checkId' }, // Namespaced ref - { ref: 'atcfinding:checkTitle' }, - { ref: 'atcfinding:priority' }, - ], - }], + complexType: [ + { + name: 'AtcFinding', + attribute: [ + { ref: 'atcfinding:checkId' }, // Namespaced ref + { ref: 'atcfinding:checkTitle' }, + { ref: 'atcfinding:priority' }, + ], + }, + ], } as const; const ct = schema.complexType[0] as ComplexTypeLike; const attrs = [...walkAttributes(ct, schema as SchemaLike)]; assert.equal(attrs.length, 3); - - const names = attrs.map(a => a.attribute.name); + + const names = attrs.map((a) => a.attribute.name); assert.ok(names.includes('checkId')); assert.ok(names.includes('checkTitle')); assert.ok(names.includes('priority')); // Check type is preserved - const priorityAttr = attrs.find(a => a.attribute.name === 'priority'); + const priorityAttr = attrs.find((a) => a.attribute.name === 'priority'); assert.equal(priorityAttr?.attribute.type, 'xs:int'); }); it('should merge use from ref with resolved attribute', () => { const importedSchema = { - attribute: [ - { name: 'optionalAttr', type: 'xs:string', use: 'optional' }, - ], + attribute: [{ name: 'optionalAttr', type: 'xs:string', use: 'optional' }], } as const; const schema = { $imports: [importedSchema], - complexType: [{ - name: 'Test', - attribute: [ - { ref: 'ns:optionalAttr', use: 'required' }, // Override use - ], - }], + complexType: [ + { + name: 'Test', + attribute: [ + { ref: 'ns:optionalAttr', use: 'required' }, // Override use + ], + }, + ], } as const; const ct = schema.complexType[0] as ComplexTypeLike; @@ -96,63 +98,63 @@ describe('walkAttributes with attribute references', () => { assert.equal(attrs.length, 1); assert.equal(attrs[0].attribute.name, 'optionalAttr'); - assert.equal(attrs[0].required, true); // use='required' from ref + assert.equal(attrs[0].required, true); // use='required' from ref }); it('should handle mixed direct attributes and refs', () => { const importedSchema = { - attribute: [ - { name: 'importedAttr', type: 'xs:string' }, - ], + attribute: [{ name: 'importedAttr', type: 'xs:string' }], } as const; const schema = { $imports: [importedSchema], - complexType: [{ - name: 'Mixed', - attribute: [ - { name: 'directAttr', type: 'xs:int' }, // Direct attribute - { ref: 'ns:importedAttr' }, // Referenced attribute - ], - }], + complexType: [ + { + name: 'Mixed', + attribute: [ + { name: 'directAttr', type: 'xs:int' }, // Direct attribute + { ref: 'ns:importedAttr' }, // Referenced attribute + ], + }, + ], } as const; const ct = schema.complexType[0] as ComplexTypeLike; const attrs = [...walkAttributes(ct, schema as SchemaLike)]; assert.equal(attrs.length, 2); - - const names = attrs.map(a => a.attribute.name); + + const names = attrs.map((a) => a.attribute.name); assert.ok(names.includes('directAttr')); assert.ok(names.includes('importedAttr')); }); it('should resolve refs in complexContent/extension', () => { const importedSchema = { - attribute: [ - { name: 'extAttr', type: 'xs:string' }, + attribute: [{ name: 'extAttr', type: 'xs:string' }], + complexType: [ + { + name: 'BaseType', + attribute: [{ name: 'baseAttr', type: 'xs:string' }], + }, ], - complexType: [{ - name: 'BaseType', - attribute: [ - { name: 'baseAttr', type: 'xs:string' }, - ], - }], } as const; const schema = { $imports: [importedSchema], - complexType: [{ - name: 'ExtendedType', - complexContent: { - extension: { - base: 'ns:BaseType', - attribute: [ - { ref: 'ns:extAttr' }, // Ref in extension - ], + complexType: [ + { + name: 'ExtendedType', + complexContent: { + extension: { + base: 'ns:BaseType', + attribute: [ + { ref: 'ns:extAttr' }, // Ref in extension + ], + }, }, }, - }], + ], } as const; const ct = schema.complexType[0] as ComplexTypeLike; @@ -160,21 +162,21 @@ describe('walkAttributes with attribute references', () => { // Should have both inherited and extension attributes assert.equal(attrs.length, 2); - - const names = attrs.map(a => a.attribute.name); - assert.ok(names.includes('baseAttr')); // Inherited - assert.ok(names.includes('extAttr')); // From ref + + const names = attrs.map((a) => a.attribute.name); + assert.ok(names.includes('baseAttr')); // Inherited + assert.ok(names.includes('extAttr')); // From ref }); it('should fallback to ref name if attribute not found', () => { // Schema with ref to non-existent attribute const schema = { - complexType: [{ - name: 'Test', - attribute: [ - { ref: 'unknown:missingAttr' }, - ], - }], + complexType: [ + { + name: 'Test', + attribute: [{ ref: 'unknown:missingAttr' }], + }, + ], } as const; const ct = schema.complexType[0] as ComplexTypeLike; diff --git a/packages/ts-xsd/tests/unit/walker.test.ts b/packages/ts-xsd/tests/unit/walker.test.ts index 46c3a54d..6f05729c 100644 --- a/packages/ts-xsd/tests/unit/walker.test.ts +++ b/packages/ts-xsd/tests/unit/walker.test.ts @@ -33,9 +33,7 @@ describe('Schema Walker', () => { { name: 'name', type: 'xs:string' }, ], }, - attribute: [ - { name: 'version', type: 'xs:string', use: 'required' }, - ], + attribute: [{ name: 'version', type: 'xs:string', use: 'required' }], }, ], simpleType: [ @@ -68,18 +66,14 @@ describe('Schema Walker', () => { { name: 'phones', type: 'xs:string', maxOccurs: 'unbounded' }, ], }, - attribute: [ - { name: 'active', type: 'xs:boolean' }, - ], + attribute: [{ name: 'active', type: 'xs:boolean' }], }, }, }, { name: 'CompanyType', sequence: { - element: [ - { name: 'companyName', type: 'xs:string' }, - ], + element: [{ name: 'companyName', type: 'xs:string' }], }, }, ], @@ -105,9 +99,7 @@ describe('Schema Walker', () => { { name: 'ComplexType', sequence: { - element: [ - { name: 'header', type: 'xs:string' }, - ], + element: [{ name: 'header', type: 'xs:string' }], sequence: [ { element: [ @@ -136,7 +128,7 @@ describe('Schema Walker', () => { describe('walkComplexTypes', () => { it('should yield all complexTypes in a schema', () => { const types = [...walkComplexTypes(baseSchema)]; - + assert.equal(types.length, 1); assert.equal(types[0].ct.name, 'BaseType'); assert.equal(types[0].schema, baseSchema); @@ -144,10 +136,10 @@ describe('Schema Walker', () => { it('should yield complexTypes from $imports', () => { const types = [...walkComplexTypes(derivedSchema)]; - + assert.equal(types.length, 3); // PersonType, CompanyType, BaseType - - const names = types.map(t => t.ct.name); + + const names = types.map((t) => t.ct.name); assert.ok(names.includes('PersonType')); assert.ok(names.includes('CompanyType')); assert.ok(names.includes('BaseType')); @@ -155,11 +147,11 @@ describe('Schema Walker', () => { it('should preserve schema context for each type', () => { const types = [...walkComplexTypes(derivedSchema)]; - - const baseType = types.find(t => t.ct.name === 'BaseType'); + + const baseType = types.find((t) => t.ct.name === 'BaseType'); assert.equal(baseType?.schema, baseSchema); - - const personType = types.find(t => t.ct.name === 'PersonType'); + + const personType = types.find((t) => t.ct.name === 'PersonType'); assert.equal(personType?.schema, derivedSchema); }); }); @@ -171,14 +163,14 @@ describe('Schema Walker', () => { describe('walkSimpleTypes', () => { it('should yield all simpleTypes in a schema', () => { const types = [...walkSimpleTypes(baseSchema)]; - + assert.equal(types.length, 1); assert.equal(types[0].st.name, 'StatusType'); }); it('should yield simpleTypes from $imports', () => { const types = [...walkSimpleTypes(derivedSchema)]; - + assert.equal(types.length, 1); assert.equal(types[0].st.name, 'StatusType'); assert.equal(types[0].schema, baseSchema); @@ -192,7 +184,7 @@ describe('Schema Walker', () => { describe('walkTopLevelElements', () => { it('should yield all top-level elements', () => { const elements = [...walkTopLevelElements(derivedSchema)]; - + assert.equal(elements.length, 2); assert.equal(elements[0].element.name, 'person'); assert.equal(elements[1].element.name, 'company'); @@ -206,7 +198,7 @@ describe('Schema Walker', () => { describe('findComplexType', () => { it('should find type in current schema', () => { const result = findComplexType('PersonType', derivedSchema); - + assert.ok(result); assert.equal(result?.ct.name, 'PersonType'); assert.equal(result?.schema, derivedSchema); @@ -214,7 +206,7 @@ describe('Schema Walker', () => { it('should find type in $imports', () => { const result = findComplexType('BaseType', derivedSchema); - + assert.ok(result); assert.equal(result?.ct.name, 'BaseType'); assert.equal(result?.schema, baseSchema); @@ -222,7 +214,7 @@ describe('Schema Walker', () => { it('should return undefined for non-existent type', () => { const result = findComplexType('NonExistent', derivedSchema); - + assert.equal(result, undefined); }); }); @@ -234,7 +226,7 @@ describe('Schema Walker', () => { describe('findSimpleType', () => { it('should find simpleType in $imports', () => { const result = findSimpleType('StatusType', derivedSchema); - + assert.ok(result); assert.equal(result?.st.name, 'StatusType'); }); @@ -247,7 +239,7 @@ describe('Schema Walker', () => { describe('findElement', () => { it('should find top-level element', () => { const result = findElement('person', derivedSchema); - + assert.ok(result); assert.equal(result?.element.name, 'person'); assert.equal(result?.element.type, 'PersonType'); @@ -263,7 +255,7 @@ describe('Schema Walker', () => { const types = derivedSchema.complexType as ComplexTypeLike[]; const companyType = types[1]; const elements = [...walkElements(companyType, derivedSchema)]; - + assert.equal(elements.length, 1); assert.equal(elements[0].element.name, 'companyName'); assert.equal(elements[0].optional, false); @@ -275,24 +267,24 @@ describe('Schema Walker', () => { const types = derivedSchema.complexType as ComplexTypeLike[]; const personType = types[0]; const elements = [...walkElements(personType, derivedSchema)]; - + // Should include inherited elements from BaseType + own elements - const names = elements.map(e => e.element.name); - assert.ok(names.includes('id')); // inherited - assert.ok(names.includes('name')); // inherited - assert.ok(names.includes('email')); // own - assert.ok(names.includes('phones')); // own + const names = elements.map((e) => e.element.name); + assert.ok(names.includes('id')); // inherited + assert.ok(names.includes('name')); // inherited + assert.ok(names.includes('email')); // own + assert.ok(names.includes('phones')); // own }); it('should mark optional elements correctly', () => { const types = derivedSchema.complexType as ComplexTypeLike[]; const personType = types[0]; const elements = [...walkElements(personType, derivedSchema)]; - - const email = elements.find(e => e.element.name === 'email'); + + const email = elements.find((e) => e.element.name === 'email'); assert.equal(email?.optional, true); - - const id = elements.find(e => e.element.name === 'id'); + + const id = elements.find((e) => e.element.name === 'id'); assert.equal(id?.optional, false); }); @@ -300,11 +292,11 @@ describe('Schema Walker', () => { const types = derivedSchema.complexType as ComplexTypeLike[]; const personType = types[0]; const elements = [...walkElements(personType, derivedSchema)]; - - const phones = elements.find(e => e.element.name === 'phones'); + + const phones = elements.find((e) => e.element.name === 'phones'); assert.equal(phones?.array, true); - - const email = elements.find(e => e.element.name === 'email'); + + const email = elements.find((e) => e.element.name === 'email'); assert.equal(email?.array, false); }); @@ -312,30 +304,30 @@ describe('Schema Walker', () => { const types = schemaWithChoice.complexType as ComplexTypeLike[]; const paymentType = types[0]; const elements = [...walkElements(paymentType, schemaWithChoice)]; - + assert.equal(elements.length, 3); - assert.ok(elements.every(e => e.optional)); - assert.ok(elements.every(e => e.source === 'choice')); + assert.ok(elements.every((e) => e.optional)); + assert.ok(elements.every((e) => e.source === 'choice')); }); it('should handle nested groups', () => { const types = schemaWithNestedGroups.complexType as ComplexTypeLike[]; const complexType = types[0]; const elements = [...walkElements(complexType, schemaWithNestedGroups)]; - - const names = elements.map(e => e.element.name); + + const names = elements.map((e) => e.element.name); assert.ok(names.includes('header')); assert.ok(names.includes('nested1')); assert.ok(names.includes('nested2')); assert.ok(names.includes('optionA')); assert.ok(names.includes('optionB')); - + // nested2 should be optional (minOccurs=0) - const nested2 = elements.find(e => e.element.name === 'nested2'); + const nested2 = elements.find((e) => e.element.name === 'nested2'); assert.equal(nested2?.optional, true); - + // Choice elements should be optional - const optionA = elements.find(e => e.element.name === 'optionA'); + const optionA = elements.find((e) => e.element.name === 'optionA'); assert.equal(optionA?.optional, true); }); }); @@ -349,7 +341,7 @@ describe('Schema Walker', () => { const types = baseSchema.complexType as ComplexTypeLike[]; const baseType = types[0]; const attrs = [...walkAttributes(baseType, baseSchema)]; - + assert.equal(attrs.length, 1); assert.equal(attrs[0].attribute.name, 'version'); assert.equal(attrs[0].required, true); @@ -359,21 +351,21 @@ describe('Schema Walker', () => { const types = derivedSchema.complexType as ComplexTypeLike[]; const personType = types[0]; const attrs = [...walkAttributes(personType, derivedSchema)]; - - const names = attrs.map(a => a.attribute.name); + + const names = attrs.map((a) => a.attribute.name); assert.ok(names.includes('version')); // inherited - assert.ok(names.includes('active')); // own + assert.ok(names.includes('active')); // own }); it('should mark required/optional correctly', () => { const types = derivedSchema.complexType as ComplexTypeLike[]; const personType = types[0]; const attrs = [...walkAttributes(personType, derivedSchema)]; - - const version = attrs.find(a => a.attribute.name === 'version'); + + const version = attrs.find((a) => a.attribute.name === 'version'); assert.equal(version?.required, true); - - const active = attrs.find(a => a.attribute.name === 'active'); + + const active = attrs.find((a) => a.attribute.name === 'active'); assert.equal(active?.required, false); }); }); @@ -402,20 +394,20 @@ describe('Schema Walker', () => { describe('lazy evaluation', () => { it('should stop iteration early when match found', () => { let iterationCount = 0; - + // Create a schema with many types const largeSchema: SchemaLike = { complexType: Array.from({ length: 100 }, (_, i) => ({ name: `Type${i}`, })), }; - + // Find Type5 - should stop after ~6 iterations for (const { ct } of walkComplexTypes(largeSchema)) { iterationCount++; if (ct.name === 'Type5') break; } - + assert.equal(iterationCount, 6); // 0, 1, 2, 3, 4, 5 }); }); @@ -437,14 +429,18 @@ describe('Schema Walker', () => { { name: 'CLAS', type: 'ClasType', substitutionGroup: 'asx:Schema' }, ], complexType: [ - { name: 'DevcType', sequence: { element: [{ name: 'CTEXT', type: 'xs:string' }] } }, - { name: 'ClasType', sequence: { element: [{ name: 'CLSNAME', type: 'xs:string' }] } }, + { + name: 'DevcType', + sequence: { element: [{ name: 'CTEXT', type: 'xs:string' }] }, + }, + { + name: 'ClasType', + sequence: { element: [{ name: 'CLSNAME', type: 'xs:string' }] }, + }, { name: 'AbapValuesType', sequence: { - element: [ - { ref: 'asx:Schema' }, - ], + element: [{ ref: 'asx:Schema' }], }, }, ], @@ -452,28 +448,45 @@ describe('Schema Walker', () => { it('should yield substitutes instead of abstract element ref', () => { const complexTypes = substitutionSchema.complexType as ComplexTypeLike[]; - const valuesType = complexTypes.find((ct: ComplexTypeLike) => ct.name === 'AbapValuesType'); + const valuesType = complexTypes.find( + (ct: ComplexTypeLike) => ct.name === 'AbapValuesType', + ); assert.ok(valuesType, 'AbapValuesType should exist'); - + const elements = [...walkElements(valuesType, substitutionSchema)]; - + // Should yield DEVC and CLAS (the substitutes), not Schema (the abstract) - const elementNames = elements.map(e => e.element.name); - - assert.ok(elementNames.includes('DEVC'), 'Should include DEVC substitute'); - assert.ok(elementNames.includes('CLAS'), 'Should include CLAS substitute'); - assert.ok(!elementNames.includes('Schema'), 'Should NOT include abstract Schema'); + const elementNames = elements.map((e) => e.element.name); + + assert.ok( + elementNames.includes('DEVC'), + 'Should include DEVC substitute', + ); + assert.ok( + elementNames.includes('CLAS'), + 'Should include CLAS substitute', + ); + assert.ok( + !elementNames.includes('Schema'), + 'Should NOT include abstract Schema', + ); }); it('should preserve optionality from ref when yielding substitutes', () => { const complexTypes = substitutionSchema.complexType as ComplexTypeLike[]; - const valuesType = complexTypes.find((ct: ComplexTypeLike) => ct.name === 'AbapValuesType'); + const valuesType = complexTypes.find( + (ct: ComplexTypeLike) => ct.name === 'AbapValuesType', + ); assert.ok(valuesType); const elements = [...walkElements(valuesType, substitutionSchema)]; - + // All substitutes should have same optionality as the original ref for (const entry of elements) { - assert.equal(entry.optional, false, `${entry.element.name} should not be optional`); + assert.equal( + entry.optional, + false, + `${entry.element.name} should not be optional`, + ); } }); }); @@ -507,16 +520,16 @@ describe('Schema Walker', () => { it('should walk complexTypes in object format', () => { const types = [...walkComplexTypes(objectFormatSchema)]; - const names = types.map(t => t.ct.name); - + const names = types.map((t) => t.ct.name); + assert.ok(names.includes('PersonType'), 'Should include PersonType'); assert.ok(names.includes('AddressType'), 'Should include AddressType'); }); it('should walk simpleTypes in object format', () => { const types = [...walkSimpleTypes(objectFormatSchema)]; - const names = types.map(t => t.st.name); - + const names = types.map((t) => t.st.name); + assert.ok(names.includes('StatusType'), 'Should include StatusType'); assert.ok(names.includes('CodeType'), 'Should include CodeType'); }); @@ -590,12 +603,12 @@ describe('Schema Walker', () => { it('should walk elements from base type via extension', () => { const complexTypes = extensionSchema.complexType as ComplexTypeLike[]; const derivedType = complexTypes.find( - (ct: ComplexTypeLike) => ct.name === 'DerivedType' + (ct: ComplexTypeLike) => ct.name === 'DerivedType', ) as ComplexTypeLike; - + const elements = [...walkElements(derivedType, extensionSchema)]; - const names = elements.map(e => e.element.name); - + const names = elements.map((e) => e.element.name); + assert.ok(names.includes('baseField'), 'Should include base field'); assert.ok(names.includes('derivedField'), 'Should include derived field'); }); @@ -603,14 +616,17 @@ describe('Schema Walker', () => { it('should walk attributes from base type via extension', () => { const complexTypes = extensionSchema.complexType as ComplexTypeLike[]; const derivedType = complexTypes.find( - (ct: ComplexTypeLike) => ct.name === 'DerivedType' + (ct: ComplexTypeLike) => ct.name === 'DerivedType', ) as ComplexTypeLike; - + const attrs = [...walkAttributes(derivedType, extensionSchema)]; - const names = attrs.map(a => a.attribute.name); - + const names = attrs.map((a) => a.attribute.name); + assert.ok(names.includes('baseAttr'), 'Should include base attribute'); - assert.ok(names.includes('derivedAttr'), 'Should include derived attribute'); + assert.ok( + names.includes('derivedAttr'), + 'Should include derived attribute', + ); }); }); @@ -644,14 +660,17 @@ describe('Schema Walker', () => { it('should walk elements from group reference', () => { const complexTypes = groupSchema.complexType as ComplexTypeLike[]; const recordType = complexTypes.find( - (ct: ComplexTypeLike) => ct.name === 'RecordType' + (ct: ComplexTypeLike) => ct.name === 'RecordType', ) as ComplexTypeLike; - + const elements = [...walkElements(recordType, groupSchema)]; - const names = elements.map(e => e.element.name); - + const names = elements.map((e) => e.element.name); + assert.ok(names.includes('id'), 'Should include id from group'); - assert.ok(names.includes('timestamp'), 'Should include timestamp from group'); + assert.ok( + names.includes('timestamp'), + 'Should include timestamp from group', + ); assert.ok(names.includes('data'), 'Should include direct element'); }); }); @@ -682,14 +701,17 @@ describe('Schema Walker', () => { it('should walk attributes from attributeGroup reference', () => { const complexTypes = attrGroupSchema.complexType as ComplexTypeLike[]; const docType = complexTypes.find( - (ct: ComplexTypeLike) => ct.name === 'DocumentType' + (ct: ComplexTypeLike) => ct.name === 'DocumentType', ) as ComplexTypeLike; - + const attrs = [...walkAttributes(docType, attrGroupSchema)]; - const names = attrs.map(a => a.attribute.name); - + const names = attrs.map((a) => a.attribute.name); + assert.ok(names.includes('lang'), 'Should include lang from group'); - assert.ok(names.includes('encoding'), 'Should include encoding from group'); + assert.ok( + names.includes('encoding'), + 'Should include encoding from group', + ); assert.ok(names.includes('version'), 'Should include direct attribute'); }); }); @@ -724,12 +746,12 @@ describe('Schema Walker', () => { it('should walk elements from choice group', () => { const complexTypes = choiceSchema.complexType as ComplexTypeLike[]; const choiceType = complexTypes.find( - (ct: ComplexTypeLike) => ct.name === 'ChoiceType' + (ct: ComplexTypeLike) => ct.name === 'ChoiceType', ) as ComplexTypeLike; - + const elements = [...walkElements(choiceType, choiceSchema)]; - const names = elements.map(e => e.element.name); - + const names = elements.map((e) => e.element.name); + assert.ok(names.includes('optionA')); assert.ok(names.includes('optionB')); }); @@ -737,12 +759,12 @@ describe('Schema Walker', () => { it('should walk elements from all group', () => { const complexTypes = choiceSchema.complexType as ComplexTypeLike[]; const allType = complexTypes.find( - (ct: ComplexTypeLike) => ct.name === 'AllType' + (ct: ComplexTypeLike) => ct.name === 'AllType', ) as ComplexTypeLike; - + const elements = [...walkElements(allType, choiceSchema)]; - const names = elements.map(e => e.element.name); - + const names = elements.map((e) => e.element.name); + assert.ok(names.includes('field1')); assert.ok(names.includes('field2')); }); diff --git a/packages/ts-xsd/tests/unit/xml-build.test.ts b/packages/ts-xsd/tests/unit/xml-build.test.ts index eb8f8dc8..9f5e8d82 100644 --- a/packages/ts-xsd/tests/unit/xml-build.test.ts +++ b/packages/ts-xsd/tests/unit/xml-build.test.ts @@ -46,7 +46,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { firstName: 'John', lastName: 'Doe' }, { xmlDecl: false }); + const xml = buildXml( + schema, + { firstName: 'John', lastName: 'Doe' }, + { xmlDecl: false }, + ); assert.ok(xml.includes('John')); assert.ok(xml.includes('Doe')); @@ -68,7 +72,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { name: 'John', age: undefined }, { xmlDecl: false }); + const xml = buildXml( + schema, + { name: 'John', age: undefined }, + { xmlDecl: false }, + ); assert.ok(xml.includes('John')); assert.ok(!xml.includes('')); @@ -224,7 +232,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { active: true, enabled: false }, { xmlDecl: false }); + const xml = buildXml( + schema, + { active: true, enabled: false }, + { xmlDecl: false }, + ); assert.ok(xml.includes('true')); assert.ok(xml.includes('false')); @@ -247,10 +259,16 @@ describe('buildXml', () => { } as const satisfies SchemaLike; const date = new Date('2024-01-15T10:30:00Z'); - const xml = buildXml(schema, { date, timestamp: date }, { xmlDecl: false }); + const xml = buildXml( + schema, + { date, timestamp: date }, + { xmlDecl: false }, + ); assert.ok(xml.includes('2024-01-15')); - assert.ok(xml.includes('2024-01-15T10:30:00.000Z')); + assert.ok( + xml.includes('2024-01-15T10:30:00.000Z'), + ); }); it('should format numbers', () => { @@ -280,13 +298,19 @@ describe('buildXml', () => { { name: 'ListType', sequence: { - element: [{ name: 'item', type: 'xs:string', maxOccurs: 'unbounded' }], + element: [ + { name: 'item', type: 'xs:string', maxOccurs: 'unbounded' }, + ], }, }, ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { item: ['a', 'b', 'c'] }, { xmlDecl: false }); + const xml = buildXml( + schema, + { item: ['a', 'b', 'c'] }, + { xmlDecl: false }, + ); assert.ok(xml.includes('a')); assert.ok(xml.includes('b')); @@ -300,7 +324,9 @@ describe('buildXml', () => { { name: 'OrderType', sequence: { - element: [{ name: 'item', type: 'ItemType', maxOccurs: 'unbounded' }], + element: [ + { name: 'item', type: 'ItemType', maxOccurs: 'unbounded' }, + ], }, }, { @@ -315,12 +341,16 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { - item: [ - { sku: 'A1', qty: 2 }, - { sku: 'B2', qty: 3 }, - ], - }, { xmlDecl: false }); + const xml = buildXml( + schema, + { + item: [ + { sku: 'A1', qty: 2 }, + { sku: 'B2', qty: 3 }, + ], + }, + { xmlDecl: false }, + ); assert.ok(xml.includes('A1')); assert.ok(xml.includes('2')); @@ -349,7 +379,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { customer: { name: 'John' } }, { xmlDecl: false }); + const xml = buildXml( + schema, + { customer: { name: 'John' } }, + { xmlDecl: false }, + ); assert.ok(xml.includes('')); assert.ok(xml.includes('John')); @@ -396,7 +430,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { field1: 'a', field2: 'b' }, { xmlDecl: false }); + const xml = buildXml( + schema, + { field1: 'a', field2: 'b' }, + { xmlDecl: false }, + ); assert.ok(xml.includes('a')); assert.ok(xml.includes('b')); @@ -428,7 +466,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { name: 'John', department: 'Engineering' }, { xmlDecl: false }); + const xml = buildXml( + schema, + { name: 'John', department: 'Engineering' }, + { xmlDecl: false }, + ); assert.ok(xml.includes('John')); assert.ok(xml.includes('Engineering')); @@ -454,7 +496,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { id: 'P1', empId: 'E1' }, { xmlDecl: false }); + const xml = buildXml( + schema, + { id: 'P1', empId: 'E1' }, + { xmlDecl: false }, + ); assert.ok(xml.includes('id="P1"')); assert.ok(xml.includes('empId="E1"')); @@ -475,7 +521,11 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { name: 'John' }, { xmlDecl: false, pretty: true }); + const xml = buildXml( + schema, + { name: 'John' }, + { xmlDecl: false, pretty: true }, + ); assert.ok(xml.includes('\n')); assert.ok(xml.includes(' ')); // indentation @@ -578,7 +628,9 @@ describe('buildXml', () => { { name: 'AbapValuesType', sequence: { - element: [{ ref: 'Schema', minOccurs: '0', maxOccurs: 'unbounded' }], + element: [ + { ref: 'Schema', minOccurs: '0', maxOccurs: 'unbounded' }, + ], }, }, ], @@ -588,12 +640,14 @@ describe('buildXml', () => { element: [ { name: 'DD01V', type: 'Dd01vType', substitutionGroup: 'Schema' }, ], - complexType: [{ - name: 'Dd01vType', - sequence: { - element: [{ name: 'DOMNAME', type: 'xs:string' }], + complexType: [ + { + name: 'Dd01vType', + sequence: { + element: [{ name: 'DOMNAME', type: 'xs:string' }], + }, }, - }], + ], $imports: [asxSchema], } as const satisfies SchemaLike; @@ -610,14 +664,26 @@ describe('buildXml', () => { }, }; - const xml = buildXml(combinedSchema, data, { rootElement: 'abap', xmlDecl: false }); + const xml = buildXml(combinedSchema, data, { + rootElement: 'abap', + xmlDecl: false, + }); // Should build DD01V element (substitute), not Schema (abstract) assert.ok(xml.includes(' but got: ${xml}`); assert.ok(xml.includes(''), `Expected but got: ${xml}`); - assert.ok(xml.includes(''), `Expected (substitute) but got: ${xml}`); - assert.ok(xml.includes('ZTEST'), `Expected DOMNAME content but got: ${xml}`); - assert.ok(!xml.includes(''), `Should NOT have abstract element`); + assert.ok( + xml.includes(''), + `Expected (substitute) but got: ${xml}`, + ); + assert.ok( + xml.includes('ZTEST'), + `Expected DOMNAME content but got: ${xml}`, + ); + assert.ok( + !xml.includes(''), + `Should NOT have abstract element`, + ); }); }); @@ -627,25 +693,29 @@ describe('buildXml', () => { // The root element "abapGit" is in abapgit.xsd, not doma.xsd const abapgitSchema = { element: [{ name: 'abapGit', type: 'AbapGitType' }], - complexType: [{ - name: 'AbapGitType', - sequence: { - element: [ - { name: 'version', type: 'xs:string' }, - { name: 'content', type: 'xs:string' }, - ], + complexType: [ + { + name: 'AbapGitType', + sequence: { + element: [ + { name: 'version', type: 'xs:string' }, + { name: 'content', type: 'xs:string' }, + ], + }, }, - }], + ], } as const satisfies SchemaLike; const domaSchema = { element: [{ name: 'DD01V', type: 'Dd01vType' }], - complexType: [{ - name: 'Dd01vType', - sequence: { - element: [{ name: 'DOMNAME', type: 'xs:string' }], + complexType: [ + { + name: 'Dd01vType', + sequence: { + element: [{ name: 'DOMNAME', type: 'xs:string' }], + }, }, - }], + ], $imports: [abapgitSchema], } as const satisfies SchemaLike; @@ -666,22 +736,26 @@ describe('buildXml', () => { it('should prefer element from main schema when data matches both', () => { const importedSchema = { element: [{ name: 'Item', type: 'ItemType' }], - complexType: [{ - name: 'ItemType', - sequence: { - element: [{ name: 'name', type: 'xs:string' }], + complexType: [ + { + name: 'ItemType', + sequence: { + element: [{ name: 'name', type: 'xs:string' }], + }, }, - }], + ], } as const satisfies SchemaLike; const mainSchema = { element: [{ name: 'Product', type: 'ProductType' }], - complexType: [{ - name: 'ProductType', - sequence: { - element: [{ name: 'name', type: 'xs:string' }], + complexType: [ + { + name: 'ProductType', + sequence: { + element: [{ name: 'name', type: 'xs:string' }], + }, }, - }], + ], $imports: [importedSchema], } as const satisfies SchemaLike; @@ -698,12 +772,14 @@ describe('buildXml', () => { it('should throw when rootElement not found in schema or $imports', () => { const schema = { element: [{ name: 'Person', type: 'PersonType' }], - complexType: [{ - name: 'PersonType', - sequence: { - element: [{ name: 'name', type: 'xs:string' }], + complexType: [ + { + name: 'PersonType', + sequence: { + element: [{ name: 'name', type: 'xs:string' }], + }, }, - }], + ], } as const satisfies SchemaLike; assert.throws(() => { @@ -714,12 +790,14 @@ describe('buildXml', () => { it('should find rootElement in $imports', () => { const importedSchema = { element: [{ name: 'Item', type: 'ItemType' }], - complexType: [{ - name: 'ItemType', - sequence: { - element: [{ name: 'id', type: 'xs:string' }], + complexType: [ + { + name: 'ItemType', + sequence: { + element: [{ name: 'id', type: 'xs:string' }], + }, }, - }], + ], } as const satisfies SchemaLike; const mainSchema = { @@ -728,7 +806,11 @@ describe('buildXml', () => { $imports: [importedSchema], } as const satisfies SchemaLike; - const xml = buildXml(mainSchema, { id: '123' }, { rootElement: 'Item', xmlDecl: false }); + const xml = buildXml( + mainSchema, + { id: '123' }, + { rootElement: 'Item', xmlDecl: false }, + ); assert.ok(xml.includes(' but got: ${xml}`); assert.ok(xml.includes('123')); }); @@ -738,18 +820,24 @@ describe('buildXml', () => { it('should format XML with pretty option', () => { const schema = { element: [{ name: 'Root', type: 'RootType' }], - complexType: [{ - name: 'RootType', - sequence: { - element: [ - { name: 'child1', type: 'xs:string' }, - { name: 'child2', type: 'xs:string' }, - ], + complexType: [ + { + name: 'RootType', + sequence: { + element: [ + { name: 'child1', type: 'xs:string' }, + { name: 'child2', type: 'xs:string' }, + ], + }, }, - }], + ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { child1: 'a', child2: 'b' }, { pretty: true, xmlDecl: false }); + const xml = buildXml( + schema, + { child1: 'a', child2: 'b' }, + { pretty: true, xmlDecl: false }, + ); // Pretty printed XML should have newlines assert.ok(xml.includes('\n'), 'Pretty XML should contain newlines'); }); @@ -759,16 +847,25 @@ describe('buildXml', () => { it('should use custom encoding in XML declaration', () => { const schema = { element: [{ name: 'Root', type: 'RootType' }], - complexType: [{ - name: 'RootType', - sequence: { - element: [{ name: 'value', type: 'xs:string' }], + complexType: [ + { + name: 'RootType', + sequence: { + element: [{ name: 'value', type: 'xs:string' }], + }, }, - }], + ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { value: 'test' }, { encoding: 'ISO-8859-1' }); - assert.ok(xml.includes('encoding="ISO-8859-1"'), `Expected ISO-8859-1 encoding but got: ${xml}`); + const xml = buildXml( + schema, + { value: 'test' }, + { encoding: 'ISO-8859-1' }, + ); + assert.ok( + xml.includes('encoding="ISO-8859-1"'), + `Expected ISO-8859-1 encoding but got: ${xml}`, + ); }); }); @@ -789,15 +886,23 @@ describe('buildXml', () => { it('should build multiple elements for array values', () => { const schema = { element: [{ name: 'Root', type: 'RootType' }], - complexType: [{ - name: 'RootType', - sequence: { - element: [{ name: 'item', type: 'xs:string', maxOccurs: 'unbounded' }], + complexType: [ + { + name: 'RootType', + sequence: { + element: [ + { name: 'item', type: 'xs:string', maxOccurs: 'unbounded' }, + ], + }, }, - }], + ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { item: ['a', 'b', 'c'] }, { xmlDecl: false }); + const xml = buildXml( + schema, + { item: ['a', 'b', 'c'] }, + { xmlDecl: false }, + ); assert.ok(xml.includes('a')); assert.ok(xml.includes('b')); assert.ok(xml.includes('c')); @@ -810,7 +915,9 @@ describe('buildXml', () => { { name: 'RootType', sequence: { - element: [{ name: 'person', type: 'PersonType', maxOccurs: 'unbounded' }], + element: [ + { name: 'person', type: 'PersonType', maxOccurs: 'unbounded' }, + ], }, }, { @@ -822,10 +929,14 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { - person: [{ name: 'Alice' }, { name: 'Bob' }] - }, { xmlDecl: false }); - + const xml = buildXml( + schema, + { + person: [{ name: 'Alice' }, { name: 'Bob' }], + }, + { xmlDecl: false }, + ); + assert.ok(xml.includes('Alice')); assert.ok(xml.includes('Bob')); }); @@ -835,10 +946,12 @@ describe('buildXml', () => { it('should skip null attribute values', () => { const schema = { element: [{ name: 'Root', type: 'RootType' }], - complexType: [{ - name: 'RootType', - attribute: [{ name: 'id', type: 'xs:string' }], - }], + complexType: [ + { + name: 'RootType', + attribute: [{ name: 'id', type: 'xs:string' }], + }, + ], } as const satisfies SchemaLike; const xml = buildXml(schema, { id: null }, { xmlDecl: false }); @@ -848,20 +961,29 @@ describe('buildXml', () => { it('should skip undefined element values', () => { const schema = { element: [{ name: 'Root', type: 'RootType' }], - complexType: [{ - name: 'RootType', - sequence: { - element: [ - { name: 'required', type: 'xs:string' }, - { name: 'optional', type: 'xs:string' }, - ], + complexType: [ + { + name: 'RootType', + sequence: { + element: [ + { name: 'required', type: 'xs:string' }, + { name: 'optional', type: 'xs:string' }, + ], + }, }, - }], + ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { required: 'yes', optional: undefined }, { xmlDecl: false }); + const xml = buildXml( + schema, + { required: 'yes', optional: undefined }, + { xmlDecl: false }, + ); assert.ok(xml.includes('yes')); - assert.ok(!xml.includes(' { }, targetNamespace: 'http://www.sap.com/adt/atc', elementFormDefault: 'qualified', - element: [ - { name: 'run', type: 'atc:RunRequest' }, - ], + element: [{ name: 'run', type: 'atc:RunRequest' }], complexType: [ { name: 'RunRequest', @@ -885,23 +1005,23 @@ describe('buildXml', () => { { name: 'objectSets', type: 'atc:ObjectSets', minOccurs: '1' }, ], }, - attribute: [ - { name: 'maximumVerdicts', type: 'xs:integer' }, - ], + attribute: [{ name: 'maximumVerdicts', type: 'xs:integer' }], }, { name: 'ObjectSets', sequence: { element: [ - { name: 'objectSet', type: 'atc:ObjectSet', maxOccurs: 'unbounded' }, + { + name: 'objectSet', + type: 'atc:ObjectSet', + maxOccurs: 'unbounded', + }, ], }, }, { name: 'ObjectSet', - attribute: [ - { name: 'kind', type: 'xs:string' }, - ], + attribute: [{ name: 'kind', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; @@ -916,10 +1036,19 @@ describe('buildXml', () => { const xml = buildXml(schema, data, { xmlDecl: false }); // Should contain the nested structure - assert.ok(xml.includes(' { name: 'ObjectReferences', sequence: { element: [ - { name: 'objectReference', type: 'adtcore:ObjectReference', maxOccurs: 'unbounded' }, + { + name: 'objectReference', + type: 'adtcore:ObjectReference', + maxOccurs: 'unbounded', + }, ], }, }, { name: 'ObjectReference', - attribute: [ - { name: 'uri', type: 'xs:string' }, - ], + attribute: [{ name: 'uri', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; @@ -963,26 +1094,32 @@ describe('buildXml', () => { targetNamespace: 'http://www.sap.com/adt/atc', attributeFormDefault: 'unqualified', elementFormDefault: 'qualified', - element: [ - { name: 'run', type: 'atc:AtcRunRequest' }, - ], + element: [{ name: 'run', type: 'atc:AtcRunRequest' }], complexType: [ { name: 'AtcRunRequest', sequence: { element: [ - { name: 'objectSets', type: 'atc:AtcObjectSets', minOccurs: '1', maxOccurs: '1' }, + { + name: 'objectSets', + type: 'atc:AtcObjectSets', + minOccurs: '1', + maxOccurs: '1', + }, ], }, - attribute: [ - { name: 'maximumVerdicts', type: 'xsd:integer' }, - ], + attribute: [{ name: 'maximumVerdicts', type: 'xsd:integer' }], }, { name: 'AtcObjectSets', sequence: { element: [ - { name: 'objectSet', type: 'atc:AtcObjectSetRequest', minOccurs: '1', maxOccurs: 'unbounded' }, + { + name: 'objectSet', + type: 'atc:AtcObjectSetRequest', + minOccurs: '1', + maxOccurs: 'unbounded', + }, ], }, }, @@ -990,12 +1127,14 @@ describe('buildXml', () => { name: 'AtcObjectSetRequest', sequence: { element: [ - { ref: 'adtcore:objectReferences', minOccurs: '0', maxOccurs: '1' }, + { + ref: 'adtcore:objectReferences', + minOccurs: '0', + maxOccurs: '1', + }, ], }, - attribute: [ - { name: 'kind', type: 'xsd:string' }, - ], + attribute: [{ name: 'kind', type: 'xsd:string' }], }, ], } as const satisfies SchemaLike; @@ -1003,25 +1142,45 @@ describe('buildXml', () => { const data = { maximumVerdicts: 100, objectSets: { - objectSet: [{ - kind: 'inclusive', - objectReferences: { - objectReference: [{ uri: '/sap/bc/adt/cts/transportrequests/TEST123' }], + objectSet: [ + { + kind: 'inclusive', + objectReferences: { + objectReference: [ + { uri: '/sap/bc/adt/cts/transportrequests/TEST123' }, + ], + }, }, - }], + ], }, }; const xml = buildXml(atcSchema, data, { xmlDecl: false }); // Should contain the full nested structure including ref element - assert.ok(xml.includes(' { @@ -1031,32 +1190,24 @@ describe('buildXml', () => { }, targetNamespace: 'http://example.com/ns', elementFormDefault: 'qualified', - element: [ - { name: 'root', type: 'ns:Level1' }, - ], + element: [{ name: 'root', type: 'ns:Level1' }], complexType: [ { name: 'Level1', sequence: { - element: [ - { name: 'level2', type: 'ns:Level2' }, - ], + element: [{ name: 'level2', type: 'ns:Level2' }], }, }, { name: 'Level2', sequence: { - element: [ - { name: 'level3', type: 'ns:Level3' }, - ], + element: [{ name: 'level3', type: 'ns:Level3' }], }, }, { name: 'Level3', sequence: { - element: [ - { name: 'value', type: 'xs:string' }, - ], + element: [{ name: 'value', type: 'xs:string' }], }, }, ], @@ -1075,7 +1226,10 @@ describe('buildXml', () => { assert.ok(xml.includes('deep'), 'Should have value element with content'); + assert.ok( + xml.includes('deep'), + 'Should have value element with content', + ); }); }); @@ -1096,7 +1250,10 @@ describe('buildXml', () => { const xml = buildXml(schema, { id: 'test' }, { xmlDecl: false }); // Root element should have explicit closing tag, not self-closing - assert.ok(xml.includes(''), 'Root element should have explicit closing tag'); + assert.ok( + xml.includes(''), + 'Root element should have explicit closing tag', + ); assert.ok(!xml.includes('/>'), 'Root element should not be self-closing'); }); @@ -1114,9 +1271,16 @@ describe('buildXml', () => { ], } as const satisfies SchemaLike; - const xml = buildXml(schema, { name: 'test', value: '123' }, { xmlDecl: false }); + const xml = buildXml( + schema, + { name: 'test', value: '123' }, + { xmlDecl: false }, + ); - assert.ok(xml.includes(''), 'Root element should have explicit closing tag'); + assert.ok( + xml.includes(''), + 'Root element should have explicit closing tag', + ); }); }); @@ -1164,14 +1328,23 @@ describe('buildXml', () => { const xml = buildXml( derivedSchema, { id: '123', name: 'Test', extra: 'value' }, - { xmlDecl: false } + { xmlDecl: false }, ); // Inherited attributes should use base namespace prefix - assert.ok(xml.includes('base:id="123"'), 'Inherited id attribute should use base: prefix'); - assert.ok(xml.includes('base:name="Test"'), 'Inherited name attribute should use base: prefix'); + assert.ok( + xml.includes('base:id="123"'), + 'Inherited id attribute should use base: prefix', + ); + assert.ok( + xml.includes('base:name="Test"'), + 'Inherited name attribute should use base: prefix', + ); // Own attribute should use derived namespace prefix - assert.ok(xml.includes('derived:extra="value"'), 'Own extra attribute should use derived: prefix'); + assert.ok( + xml.includes('derived:extra="value"'), + 'Own extra attribute should use derived: prefix', + ); }); }); }); diff --git a/packages/ts-xsd/tests/unit/xml-cross-schema.test.ts b/packages/ts-xsd/tests/unit/xml-cross-schema.test.ts index d6fa5ebb..d27c1270 100644 --- a/packages/ts-xsd/tests/unit/xml-cross-schema.test.ts +++ b/packages/ts-xsd/tests/unit/xml-cross-schema.test.ts @@ -1,6 +1,6 @@ /** * Unit tests for cross-schema XML parse/build functionality - * + * * These tests verify that parsing and building works correctly when: * 1. Types are inherited from imported schemas ($imports) * 2. Elements reference types from other schemas @@ -20,9 +20,7 @@ describe('Cross-schema XML parsing', () => { atom: 'http://www.w3.org/2005/Atom', }, targetNamespace: 'http://www.w3.org/2005/Atom', - element: [ - { name: 'link', type: 'atom:LinkType' }, - ], + element: [{ name: 'link', type: 'atom:LinkType' }], complexType: [ { name: 'LinkType', @@ -53,9 +51,7 @@ describe('Cross-schema XML parsing', () => { { ref: 'atom:link', minOccurs: '0', maxOccurs: 'unbounded' }, ], }, - attribute: [ - { name: 'id', type: 'xs:string' }, - ], + attribute: [{ name: 'id', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; @@ -132,9 +128,7 @@ describe('Cross-schema XML parsing', () => { complexContent: { extension: { base: 'base:BaseType', - attribute: [ - { name: 'status', type: 'xs:string' }, - ], + attribute: [{ name: 'status', type: 'xs:string' }], }, }, }, @@ -209,13 +203,9 @@ describe('Cross-schema XML parsing', () => { { name: 'MainType', sequence: { - element: [ - { name: 'packageRef', type: 'ref:PackageRefType' }, - ], + element: [{ name: 'packageRef', type: 'ref:PackageRefType' }], }, - attribute: [ - { name: 'name', type: 'xs:string' }, - ], + attribute: [{ name: 'name', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; @@ -244,19 +234,21 @@ describe('Cross-schema XML parsing', () => { describe('Element ref inherited from base type', () => { // This tests the case where a ref element is defined in a base type // and the derived type inherits it through multiple levels - + // atom schema defines the link element const atomSchema = { $xmlns: { atom: 'http://www.w3.org/2005/Atom' }, targetNamespace: 'http://www.w3.org/2005/Atom', element: [{ name: 'link', type: 'atom:LinkType' }], - complexType: [{ - name: 'LinkType', - attribute: [ - { name: 'href', type: 'xs:string' }, - { name: 'rel', type: 'xs:string' }, - ], - }], + complexType: [ + { + name: 'LinkType', + attribute: [ + { name: 'href', type: 'xs:string' }, + { name: 'rel', type: 'xs:string' }, + ], + }, + ], } as const satisfies SchemaLike; // adtcore imports atom and defines AdtObject with ref to atom:link @@ -267,17 +259,17 @@ describe('Cross-schema XML parsing', () => { }, $imports: [atomSchema], targetNamespace: 'http://www.sap.com/adt/core', - complexType: [{ - name: 'AdtObject', - sequence: { - element: [ - { ref: 'atom:link', minOccurs: '0', maxOccurs: 'unbounded' }, - ], + complexType: [ + { + name: 'AdtObject', + sequence: { + element: [ + { ref: 'atom:link', minOccurs: '0', maxOccurs: 'unbounded' }, + ], + }, + attribute: [{ name: 'name', type: 'xs:string' }], }, - attribute: [ - { name: 'name', type: 'xs:string' }, - ], - }], + ], } as const satisfies SchemaLike; // derived schema extends AdtObject @@ -289,17 +281,17 @@ describe('Cross-schema XML parsing', () => { $imports: [adtcoreSchema], targetNamespace: 'http://example.com/derived', element: [{ name: 'DerivedObject', type: 'derived:DerivedType' }], - complexType: [{ - name: 'DerivedType', - complexContent: { - extension: { - base: 'adtcore:AdtObject', - attribute: [ - { name: 'extra', type: 'xs:string' }, - ], + complexType: [ + { + name: 'DerivedType', + complexContent: { + extension: { + base: 'adtcore:AdtObject', + attribute: [{ name: 'extra', type: 'xs:string' }], + }, }, }, - }], + ], } as const satisfies SchemaLike; it('should parse ref elements inherited from base type in $imports', () => { @@ -315,7 +307,10 @@ describe('Cross-schema XML parsing', () => { assert.strictEqual(result.DerivedObject.name, 'test'); assert.strictEqual(result.DerivedObject.extra, 'value'); // This is the key test - link should be parsed from inherited base type - assert.ok(Array.isArray(result.DerivedObject.link), 'link should be an array'); + assert.ok( + Array.isArray(result.DerivedObject.link), + 'link should be an array', + ); assert.strictEqual(result.DerivedObject.link.length, 2); assert.strictEqual(result.DerivedObject.link[0].href, '/path/1'); }); @@ -327,18 +322,20 @@ describe('Cross-schema XML parsing', () => { // - AdtMainObject extends AdtObject (adds packageRef) // - Element declaration uses AdtMainObject type // - When parsing, the ref should be resolved from the base type - + const atomSchema = { $xmlns: { atom: 'http://www.w3.org/2005/Atom' }, targetNamespace: 'http://www.w3.org/2005/Atom', element: [{ name: 'link', type: 'atom:LinkType' }], - complexType: [{ - name: 'LinkType', - attribute: [ - { name: 'href', type: 'xs:string' }, - { name: 'rel', type: 'xs:string' }, - ], - }], + complexType: [ + { + name: 'LinkType', + attribute: [ + { name: 'href', type: 'xs:string' }, + { name: 'rel', type: 'xs:string' }, + ], + }, + ], } as const satisfies SchemaLike; const adtcoreSchema = { @@ -365,7 +362,9 @@ describe('Cross-schema XML parsing', () => { extension: { base: 'adtcore:AdtObject', sequence: { - element: [{ name: 'packageRef', type: 'xs:string', minOccurs: '0' }], + element: [ + { name: 'packageRef', type: 'xs:string', minOccurs: '0' }, + ], }, }, }, @@ -384,7 +383,10 @@ describe('Cross-schema XML parsing', () => { // parse() returns wrapped format: { ElementName: content } assert.strictEqual(result.mainObject.name, 'TEST'); // Key assertion: link should be parsed from base type AdtObject - assert.ok(Array.isArray(result.mainObject.link), 'link should be an array (from base type AdtObject)'); + assert.ok( + Array.isArray(result.mainObject.link), + 'link should be an array (from base type AdtObject)', + ); assert.strictEqual(result.mainObject.link.length, 1); assert.strictEqual(result.mainObject.link[0].href, '/test'); }); @@ -394,18 +396,20 @@ describe('Cross-schema XML parsing', () => { // This reproduces the exact SAP ADT schema structure: // AbapInterface → AbapOoObject → AbapSourceMainObject → AdtMainObject → AdtObject // where atom:link ref is in AdtObject, but interfaces doesn't directly import atom - + const atomSchema = { $xmlns: { atom: 'http://www.w3.org/2005/Atom' }, targetNamespace: 'http://www.w3.org/2005/Atom', element: [{ name: 'link', type: 'atom:LinkType' }], - complexType: [{ - name: 'LinkType', - attribute: [ - { name: 'href', type: 'xs:string' }, - { name: 'rel', type: 'xs:string' }, - ], - }], + complexType: [ + { + name: 'LinkType', + attribute: [ + { name: 'href', type: 'xs:string' }, + { name: 'rel', type: 'xs:string' }, + ], + }, + ], } as const satisfies SchemaLike; // adtcore imports atom, defines AdtObject with ref @@ -432,7 +436,9 @@ describe('Cross-schema XML parsing', () => { extension: { base: 'adtcore:AdtObject', sequence: { - element: [{ name: 'packageRef', type: 'xs:string', minOccurs: '0' }], + element: [ + { name: 'packageRef', type: 'xs:string', minOccurs: '0' }, + ], }, }, }, @@ -449,15 +455,17 @@ describe('Cross-schema XML parsing', () => { }, $imports: [adtcoreSchema, atomSchema], targetNamespace: 'http://www.sap.com/adt/abapsource', - complexType: [{ - name: 'AbapSourceMainObject', - complexContent: { - extension: { - base: 'adtcore:AdtMainObject', - attribute: [{ name: 'sourceUri', type: 'xs:string' }], + complexType: [ + { + name: 'AbapSourceMainObject', + complexContent: { + extension: { + base: 'adtcore:AdtMainObject', + attribute: [{ name: 'sourceUri', type: 'xs:string' }], + }, }, }, - }], + ], } as const satisfies SchemaLike; // abapoo imports adtcore and abapsource (NOT atom directly) @@ -469,15 +477,17 @@ describe('Cross-schema XML parsing', () => { }, $imports: [adtcoreSchema, abapsourceSchema], targetNamespace: 'http://www.sap.com/adt/oo', - complexType: [{ - name: 'AbapOoObject', - complexContent: { - extension: { - base: 'abapsource:AbapSourceMainObject', - attribute: [{ name: 'modeled', type: 'xs:boolean' }], + complexType: [ + { + name: 'AbapOoObject', + complexContent: { + extension: { + base: 'abapsource:AbapSourceMainObject', + attribute: [{ name: 'modeled', type: 'xs:boolean' }], + }, }, }, - }], + ], } as const satisfies SchemaLike; // interfaces imports abapsource and abapoo (NOT adtcore, NOT atom) @@ -490,14 +500,16 @@ describe('Cross-schema XML parsing', () => { $imports: [abapsourceSchema, abapooSchema], targetNamespace: 'http://www.sap.com/adt/oo/interfaces', element: [{ name: 'abapInterface', type: 'intf:AbapInterface' }], - complexType: [{ - name: 'AbapInterface', - complexContent: { - extension: { - base: 'abapoo:AbapOoObject', + complexType: [ + { + name: 'AbapInterface', + complexContent: { + extension: { + base: 'abapoo:AbapOoObject', + }, }, }, - }], + ], } as const satisfies SchemaLike; it('should parse ref elements through deep inheritance chain', () => { @@ -512,9 +524,15 @@ describe('Cross-schema XML parsing', () => { // parse() returns wrapped format: { ElementName: content } assert.strictEqual(result.abapInterface.name, 'ZIF_TEST'); // Key assertion: link should be parsed even though interfaces doesn't directly import atom - assert.ok(Array.isArray(result.abapInterface.link), 'link should be an array (inherited from AdtObject via deep chain)'); + assert.ok( + Array.isArray(result.abapInterface.link), + 'link should be an array (inherited from AdtObject via deep chain)', + ); assert.strictEqual(result.abapInterface.link.length, 2); - assert.strictEqual(result.abapInterface.link[0].href, '/sap/bc/adt/oo/interfaces/zif_test'); + assert.strictEqual( + result.abapInterface.link[0].href, + '/sap/bc/adt/oo/interfaces/zif_test', + ); assert.strictEqual(result.abapInterface.link[0].rel, 'self'); }); }); @@ -522,18 +540,20 @@ describe('Cross-schema XML parsing', () => { describe('Deep inheritance with qualified elements (exact SAP ADT match)', () => { // This test matches the EXACT structure of the real SAP ADT schemas // including elementFormDefault: "qualified" and attributeFormDefault: "qualified" - + const atomSchema = { $xmlns: { atom: 'http://www.w3.org/2005/Atom' }, targetNamespace: 'http://www.w3.org/2005/Atom', element: [{ name: 'link', type: 'atom:LinkType' }], - complexType: [{ - name: 'LinkType', - attribute: [ - { name: 'href', type: 'xs:string' }, - { name: 'rel', type: 'xs:string' }, - ], - }], + complexType: [ + { + name: 'LinkType', + attribute: [ + { name: 'href', type: 'xs:string' }, + { name: 'rel', type: 'xs:string' }, + ], + }, + ], } as const satisfies SchemaLike; const adtcoreSchema = { @@ -561,7 +581,9 @@ describe('Cross-schema XML parsing', () => { extension: { base: 'adtcore:AdtObject', sequence: { - element: [{ name: 'packageRef', type: 'xs:string', minOccurs: '0' }], + element: [ + { name: 'packageRef', type: 'xs:string', minOccurs: '0' }, + ], }, }, }, @@ -579,14 +601,16 @@ describe('Cross-schema XML parsing', () => { targetNamespace: 'http://www.sap.com/adt/abapsource', attributeFormDefault: 'qualified', elementFormDefault: 'qualified', - complexType: [{ - name: 'AbapSourceMainObject', - complexContent: { - extension: { - base: 'adtcore:AdtMainObject', + complexType: [ + { + name: 'AbapSourceMainObject', + complexContent: { + extension: { + base: 'adtcore:AdtMainObject', + }, }, }, - }], + ], } as const satisfies SchemaLike; const abapooSchema = { @@ -599,17 +623,26 @@ describe('Cross-schema XML parsing', () => { targetNamespace: 'http://www.sap.com/adt/oo', attributeFormDefault: 'qualified', elementFormDefault: 'qualified', - complexType: [{ - name: 'AbapOoObject', - complexContent: { - extension: { - base: 'abapsource:AbapSourceMainObject', - sequence: { - element: [{ name: 'interfaceRef', type: 'xs:string', minOccurs: '0', maxOccurs: 'unbounded' }], + complexType: [ + { + name: 'AbapOoObject', + complexContent: { + extension: { + base: 'abapsource:AbapSourceMainObject', + sequence: { + element: [ + { + name: 'interfaceRef', + type: 'xs:string', + minOccurs: '0', + maxOccurs: 'unbounded', + }, + ], + }, }, }, }, - }], + ], } as const satisfies SchemaLike; // interfaces schema - matches real SAP structure exactly @@ -624,14 +657,16 @@ describe('Cross-schema XML parsing', () => { attributeFormDefault: 'qualified', elementFormDefault: 'qualified', element: [{ name: 'abapInterface', type: 'intf:AbapInterface' }], - complexType: [{ - name: 'AbapInterface', - complexContent: { - extension: { - base: 'abapoo:AbapOoObject', + complexType: [ + { + name: 'AbapInterface', + complexContent: { + extension: { + base: 'abapoo:AbapOoObject', + }, }, }, - }], + ], } as const satisfies SchemaLike; it('should parse ref elements with qualified elements and attributes', () => { @@ -643,13 +678,16 @@ describe('Cross-schema XML parsing', () => { adtcore:name="ZIF_TEST"> `; - + const result = parseXml(interfacesSchema, xml); // parse() returns wrapped format: { ElementName: content } assert.strictEqual(result.abapInterface.name, 'ZIF_TEST'); // Key assertion: link should be parsed from base type AdtObject - assert.ok(Array.isArray(result.abapInterface.link), 'link should be an array (from base type AdtObject)'); + assert.ok( + Array.isArray(result.abapInterface.link), + 'link should be an array (from base type AdtObject)', + ); assert.strictEqual(result.abapInterface.link.length, 1); assert.strictEqual(result.abapInterface.link[0].href, '/test'); }); @@ -775,8 +813,14 @@ describe('Cross-schema XML building', () => { // Should contain all attributes (inherited + own) assert.ok(xml.includes('id="123"'), 'Should have inherited id attribute'); - assert.ok(xml.includes('name="Test"'), 'Should have inherited name attribute'); - assert.ok(xml.includes('status="active"'), 'Should have own status attribute'); + assert.ok( + xml.includes('name="Test"'), + 'Should have inherited name attribute', + ); + assert.ok( + xml.includes('status="active"'), + 'Should have own status attribute', + ); }); }); @@ -830,9 +874,15 @@ describe('Cross-schema XML building', () => { // Should contain nested element with attributes assert.ok(xml.includes('packageRef'), 'Should have packageRef element'); - assert.ok(xml.includes('uri="/path/to/pkg"'), 'Should have uri attribute'); + assert.ok( + xml.includes('uri="/path/to/pkg"'), + 'Should have uri attribute', + ); assert.ok(xml.includes('type="DEVC/K"'), 'Should have type attribute'); - assert.ok(xml.includes('name="$TMP"') || xml.includes("name='$TMP'"), 'Should have name attribute on packageRef'); + assert.ok( + xml.includes('name="$TMP"') || xml.includes("name='$TMP'"), + 'Should have name attribute on packageRef', + ); }); }); diff --git a/packages/ts-xsd/tests/unit/xml-parse.test.ts b/packages/ts-xsd/tests/unit/xml-parse.test.ts index fe6c53cd..e5d62f21 100644 --- a/packages/ts-xsd/tests/unit/xml-parse.test.ts +++ b/packages/ts-xsd/tests/unit/xml-parse.test.ts @@ -16,9 +16,7 @@ describe('parseXml', () => { { name: 'PersonType', sequence: { - element: [ - { name: 'name', type: 'xs:string' }, - ], + element: [{ name: 'name', type: 'xs:string' }], }, }, ], @@ -49,7 +47,9 @@ describe('parseXml', () => { const xml = `JohnDoe`; const result = parseXml(schema, xml); - assert.deepStrictEqual(result, { Person: { firstName: 'John', lastName: 'Doe' } }); + assert.deepStrictEqual(result, { + Person: { firstName: 'John', lastName: 'Doe' }, + }); }); it('should handle missing optional elements', () => { @@ -82,9 +82,7 @@ describe('parseXml', () => { complexType: [ { name: 'PersonType', - attribute: [ - { name: 'id', type: 'xs:string' }, - ], + attribute: [{ name: 'id', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; @@ -120,9 +118,7 @@ describe('parseXml', () => { complexType: [ { name: 'PersonType', - attribute: [ - { name: 'id', type: 'xs:string' }, - ], + attribute: [{ name: 'id', type: 'xs:string' }], }, ], } as const satisfies SchemaLike; @@ -260,9 +256,7 @@ describe('parseXml', () => { { name: 'ListType', sequence: { - element: [ - { name: 'item', type: 'xs:string', maxOccurs: 5 }, - ], + element: [{ name: 'item', type: 'xs:string', maxOccurs: 5 }], }, }, ], @@ -281,9 +275,7 @@ describe('parseXml', () => { { name: 'ListType', sequence: { - element: [ - { name: 'item', type: 'xs:string', maxOccurs: '10' }, - ], + element: [{ name: 'item', type: 'xs:string', maxOccurs: '10' }], }, }, ], @@ -304,17 +296,13 @@ describe('parseXml', () => { { name: 'OrderType', sequence: { - element: [ - { name: 'customer', type: 'CustomerType' }, - ], + element: [{ name: 'customer', type: 'CustomerType' }], }, }, { name: 'CustomerType', sequence: { - element: [ - { name: 'name', type: 'xs:string' }, - ], + element: [{ name: 'name', type: 'xs:string' }], }, }, ], @@ -478,7 +466,9 @@ describe('parseXml', () => { const xml = `JohnEngineering`; const result = parseXml(schema, xml); - assert.deepStrictEqual(result, { Employee: { name: 'John', department: 'Engineering' } }); + assert.deepStrictEqual(result, { + Employee: { name: 'John', department: 'Engineering' }, + }); }); it('should merge inherited attributes', () => { @@ -632,7 +622,9 @@ describe('parseXml', () => { const xml = `Hello`; const result = parseXml(schema, xml); - assert.deepStrictEqual(result, { Envelope: { version: '1.0', body: { content: 'Hello' } } }); + assert.deepStrictEqual(result, { + Envelope: { version: '1.0', body: { content: 'Hello' } }, + }); }); }); @@ -668,7 +660,9 @@ describe('parseXml', () => { const xml = `
Test
`; const result = parseXml(schema, xml); - assert.deepStrictEqual(result, { Document: { header: { title: 'Test' } } }); + assert.deepStrictEqual(result, { + Document: { header: { title: 'Test' } }, + }); }); it('should resolve element ref to imported schema element', () => { @@ -876,9 +870,7 @@ describe('parseXml', () => { simpleContent: { extension: { base: 'xs:string', - attribute: [ - { name: 'lang', type: 'xs:string' }, - ], + attribute: [{ name: 'lang', type: 'xs:string' }], }, }, }, diff --git a/project.json b/project.json index 858dfea6..02b6754f 100644 --- a/project.json +++ b/project.json @@ -13,6 +13,18 @@ "build": { "executor": "nx:noop", "dependsOn": [] + }, + "lint": { + "executor": "nx:noop" + }, + "test": { + "executor": "nx:noop" + }, + "typecheck": { + "executor": "nx:noop" + }, + "e2e-ci": { + "executor": "nx:noop" } } } diff --git a/samples/sample-tsdown/tsconfig.lib.json b/samples/sample-tsdown/tsconfig.lib.json index 12bcb935..459e4019 100644 --- a/samples/sample-tsdown/tsconfig.lib.json +++ b/samples/sample-tsdown/tsconfig.lib.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", diff --git a/tools/nx-sync/tsconfig.lib.json b/tools/nx-sync/tsconfig.lib.json index 12bcb935..459e4019 100644 --- a/tools/nx-sync/tsconfig.lib.json +++ b/tools/nx-sync/tsconfig.lib.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", diff --git a/tools/nx-tsdown/tsconfig.lib.json b/tools/nx-tsdown/tsconfig.lib.json index 12bcb935..459e4019 100644 --- a/tools/nx-tsdown/tsconfig.lib.json +++ b/tools/nx-tsdown/tsconfig.lib.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", diff --git a/tools/nx-typecheck/src/plugin.ts b/tools/nx-typecheck/src/plugin.ts index 003421b7..f92f3ef0 100644 --- a/tools/nx-typecheck/src/plugin.ts +++ b/tools/nx-typecheck/src/plugin.ts @@ -1,4 +1,9 @@ -import { type CreateNodesV2, logger, workspaceRoot } from '@nx/devkit'; +import { + type CreateNodesV2, + type CreateNodesResult, + logger, + workspaceRoot, +} from '@nx/devkit'; import { dirname, relative, basename, join } from 'node:path'; import { existsSync } from 'node:fs'; @@ -65,11 +70,11 @@ export const createNodesV2: CreateNodesV2 = [ const cleanEnabled = options.clean ?? false; const filteredConfigFiles = configFiles.filter( - (configFile) => basename(configFile) === configFileName + (configFile) => basename(configFile) === configFileName, ); logDebug( - `Detected ${filteredConfigFiles.length} ${configFileName} files for typecheck targets` + `Detected ${filteredConfigFiles.length} ${configFileName} files for typecheck targets`, ); return filteredConfigFiles @@ -105,7 +110,7 @@ export const createNodesV2: CreateNodesV2 = [ ], }; - return [ + const result: [string, CreateNodesResult] = [ configFile, { projects: { @@ -117,10 +122,10 @@ export const createNodesV2: CreateNodesV2 = [ }, }, ]; + return result; }) .filter( - (result): result is [string, { projects: Record }] => - result !== null + (result): result is [string, CreateNodesResult] => result !== null, ); }, ]; diff --git a/tools/nx-typecheck/tsconfig.lib.json b/tools/nx-typecheck/tsconfig.lib.json index 12bcb935..459e4019 100644 --- a/tools/nx-typecheck/tsconfig.lib.json +++ b/tools/nx-typecheck/tsconfig.lib.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", diff --git a/tools/nx-vitest/tsconfig.lib.json b/tools/nx-vitest/tsconfig.lib.json index 12bcb935..459e4019 100644 --- a/tools/nx-vitest/tsconfig.lib.json +++ b/tools/nx-vitest/tsconfig.lib.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "src", "outDir": "dist", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",